Skip to content

引入

ts
import {
  flat,
  flatten,
  shuffle,
  getAccCellWidth,
  isListAllEqual,
  getKeyValuesMap,
  getPreviousRatio,
  getMaxAndMinIdx,
  flattenPreData,
  compareTwoList
} from 't-comm';

// 不支持 tree-shaking 的项目
import {
  flat,
  flatten,
  shuffle,
  getAccCellWidth,
  isListAllEqual,
  getKeyValuesMap,
  getPreviousRatio,
  getMaxAndMinIdx,
  flattenPreData,
  compareTwoList
} from 't-comm/lib/list/index';

// 只支持 ESM 的项目
import {
  flat,
  flatten,
  shuffle,
  getAccCellWidth,
  isListAllEqual,
  getKeyValuesMap,
  getPreviousRatio,
  getMaxAndMinIdx,
  flattenPreData,
  compareTwoList
} from 't-comm/es/list/index';

flat(list)

描述

递归拉平数组

参数

参数名描述
list

数组

返回:

数组

示例

typescript
flat([[[1, 2, 3], 4], 5])

// [1, 2, 3, 4, 5]

flatten(list, key)

描述

拉平数组,不会递归处理

参数

参数名类型描述
listArray<Object>

对象数组

keystring

对象的key

返回: object

拉平后的对象

示例

typescript
const list = [{id: 1, name: 'a'}, {id: 2, name: 'b'}]

flatten(list, 'id')

// {1: {id: 1, name: 'a'}, 2: {id: 2, name: 'b'}}

shuffle(array)

描述

打乱数组顺序

参数

参数名类型描述
arrayArray<any>

数组

返回: Array<any>

乱序后的数组

示例

typescript
shuffle([1, 2, 3, 4, 5])

// [3, 2, 1, 4, 5]

getAccCellWidth(cellWidthList, idx)

描述

获取累积宽度

参数

参数名类型描述
cellWidthListArray<number>

宽度列表

idxnumber

当前idx

返回: number

累计宽度

示例

typescript
getAccCellWidth([20, 10, 20, 10], 1)

// 30

isListAllEqual(list)

描述

判断数组是否全部相等

参数

参数名类型描述
listArray<(number|string)>

数组

返回: Boolean

是否全部相等

示例

typescript
isListAllEqual([0, 0, 0])

// true

isListAllEqual([0, 0, 2])

// false

getKeyValuesMap(data)

描述

获取对象的value列表,并输出大对象形式

参数

参数名类型
dataArray<any>

返回: Object

处理后的对象

示例

typescript
const data = [
{
  Project: 'x',
  Request: 1,
  Score: 'a'
},
{
  Project: 'y',
  Request: 2,
  Score: 'b'
}]

getKeyValuesMap(data)

// 结果为:
{
  Project: ['x', 'y'],
  Request: [1, 2],
  Score: ['a', 'b'],
}

// 也支持参数为带value属性的对象数组,如:

const data = [
{
  Project: {
    value: 'x'
  }
},{
  Project: {
    value: 'y'
  }
}]

// 结果为:
{
  Project: ['x', 'y']
}

getPreviousRatio(data, preDataMap, uniqKey)

描述

获取相对上次的比例,会给输入的对象数组的每一项增加 ratio、previousValue 属性

参数

参数名类型描述
dataArray<Object>

输入数据

preDataMapObject

上次数据的map

uniqKeystring

唯一键

示例

typescript
const data = [{
  Project: { value: 'mj-match', name: 'Project' },
  Request: {
    value: 854,
    name: 'Request',
    idx: 19,
    lastIdx: 19,
    isMax: false,
    isMin: false,
    isSecondMax: false,
    isSecondMin: true,
  },
}];

const preDataMap = {
  'mj-match': {
    Project: 'mj-match',
    Request: 4,
    Score: 91.81,
    FirstLoadTime: 178,
    WholePageTime: 1035,
    ParseDomTime: 484,
    DNSLinkTime: 0,
    DOMTime: 414,
    TCP: 0,
    HTTP: 275,
    BackEnd: 60,
    CGIFailNum: 0,
    ErrorLogNum: 0,
    CGIRequestNum: 83,
  },
};

getPreviousRatio(data, preDataMap);

// data会变成:
[{
  Project: { value: 'mj-match', name: 'Project' },
  Request: {
    value: 854,
    name: 'Request',
    idx: 19,
    lastIdx: 19,
    isMax: false,
    isMin: false,
    isSecondMax: false,
    isSecondMin: true,

    previousValue: 4, // 新增属性
    ratio: "+999+%" // 新增属性
  },
}];

getMaxAndMinIdx(data, reverseScoreKeys)

描述

给对象数组的每一项,添加isMax、isMin、、isSecondMax、isSecondMin、idx、lastIdx等属性

参数

参数名类型描述
dataArray<object>

原始数据

reverseScoreKeysArray<string>

逆序的key列表

返回: Object

处理后的数据

示例

typescript
const data = [{
  ProjectName: { name: 'ProjectName', value: '麻将赛事' },
  PagePv: { name: 'PagePv', value: 2877 },
}, {
  ProjectName: { name: 'ProjectName', value: '斗地主赛事' },
  PagePv: { name: 'PagePv', value: 7 },
},
// ...
];

getMaxAndMinIdx(data, [])

// =>
  [{
    ProjectName: { name: 'ProjectName', value: '麻将赛事' },
    PagePv: {
      name: 'PagePv',
      value: 2877,
      idx: 6,
      lastIdx: 6,
      isMax: false,
      isMin: false,
      isSecondMax: false,
      isSecondMin: false,
    },
  }];

flattenPreData(preDataList, key)

描述

拉平之前数据

参数

参数名类型描述
preDataListArray<Object>

之前的数据,作为对照

keystring

主键

返回: Object

preDataMap

示例

typescript
const data = [{
  ProjectName: { name: 'ProjectName', value: '研发平台' },
  PagePv: { name: 'PagePv', value: 152 },
  PageUv: { name: 'PageUv', value: 7 },
  Score: { name: 'Score', value: 93.92 },
  PageDuration: { name: 'PageDuration', value: 1281.58 },
  PageError: { name: 'PageError', value: 2 },
}];

flattenPreData(data, 'ProjectName');

// 输出
{
  研发平台: {
    ProjectName: '研发平台',
    PagePv: 152,
    PageUv: 7,
    Score: 93.92,
    PageDuration: 1281.58,
    PageError: 2,
  },
};

compareTwoList(list, preList, key)

描述

对比两个对象列表

参数

参数名类型描述
listArray<object>

现在数据

preListArray<object>

参照数据

keystring

唯一key名称

返回: Array<object>

对比结果,增加为list的每一项增加previousValue和ratio属性

示例

typescript
const list = [
  {
    ProjectName: { name: 'ProjectName', value: '脚手架' },
    PagePv: { name: 'PagePv', value: 544343 },
    PageUv: { name: 'PageUv', value: 225275 },
  }
]

const preList = [
  {
    ProjectName: { name: 'ProjectName', value: '脚手架' },
    PagePv: { name: 'PagePv', value: 123123 },
    PageUv: { name: 'PageUv', value: 33333 },
  }
]

compareTwoList(list, preList, 'ProjectName')

console.log(list)

[
  {
    ProjectName: { name: 'ProjectName', value: '脚手架' },
    PagePv: {
      name: 'PagePv',
      value: 544343,
      ratio: '+342.1%',
      previousValue: 123123
    },
    PageUv: {
      name: 'PageUv',
      value: 225275,
      ratio: '+575.8%',
      previousValue: 33333
    }
  }
]