# 引入

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

// or

import {
  flat,
  flatten,
  shuffle,
  getAccCellWidth,
  isListAllEqual,
  getKeyValuesMap,
  getPreviousRatio,
  getMaxAndMinIdx,
  flattenPreData,
  compareTwoList
} from 't-comm/lib/base/list/index';

# flat(list)

描述

递归拉平数组

参数

参数名 描述
list

数组

返回:

数组

示例

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

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

# flatten(list, key)

描述

拉平数组,不会递归处理

参数

参数名 类型 描述
list Array<Object>

对象数组

key string

对象的key

返回: object

拉平后的对象

示例

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)

描述

打乱数组顺序

参数

参数名 类型 描述
array Array<any>

数组

返回: Array<any>

乱序后的数组

示例

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

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

# getAccCellWidth(cellWidthList, idx)

描述

获取累积宽度

参数

参数名 类型 描述
cellWidthList Array<number>

宽度列表

idx number

当前idx

返回: number

累计宽度

示例

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

// 30

# isListAllEqual(list)

描述

判断数组是否全部相等

参数

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

数组

返回: Boolean

是否全部相等

示例

isListAllEqual([0, 0, 0])

// true

isListAllEqual([0, 0, 2])

// false

# getKeyValuesMap(data)

描述

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

参数

参数名 类型
data Array<any>

返回: Object

处理后的对象

示例

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 属性

参数

参数名 类型 描述
data Array<Object>

输入数据

preDataMap Object

上次数据的map

uniqKey string

唯一键

示例

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等属性

参数

参数名 类型 描述
data Array<object>

原始数据

reverseScoreKeys Array<string>

逆序的key列表

返回: Object

处理后的数据

示例

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)

描述

拉平之前数据

参数

参数名 类型 描述
preDataList Array<Object>

之前的数据,作为对照

key string

主键

返回: Object

preDataMap

示例

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)

描述

对比两个对象列表

参数

参数名 类型 描述
list Array<object>

现在数据

preList Array<object>

参照数据

key string

唯一key名称

返回: Array<object>

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

示例

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
    }
  }
]
Last Updated: 2024/10/11 07:54:02