这里要处理的数组结构如下:
const list = [
{ pro: 'pro1', v: 666},
{ pro: 'pro2', v: 66},
{ pro: 'pro3', v: 636},
{ pro: 'pro1', v: 166},
{ pro: 'pro2', v: 266},
{ pro: 'pro1', v: 606},
]
我们需要将pro相同的 v值加起来,输出 [name: k, value: v]这样形式的数组。
这里针对需求,分析,首先需要把对应的k取出来,这里我们就先用到map来存取。
话不多说,上代码
const handelData = (r) => {
const v = [...r]
const aMap = new Map()
const arr = []
v.forEach((e) => {
const k = e.pro
aMap.set(k, (aMap.get(k) || 0) + Number(e.v))
})
aMap.forEach((e, k) => {
arr.push({ name: k, value: e })
})
return arr
}
console.log('res ====== ', handelData(list))
这里我们可以再把这个方法封装一下,让它变得通用一些
const handelData = (r, orgK, orgV, changeK, changeV) => {
const v = [...r]
const aMap = new Map()
const arr = []
v.forEach((e) => {
const k = e[orgK]
aMap.set(k, (aMap.get(k) || 0) + Number(e[orgV]))
})
aMap.forEach((val, key) => {
const item = {}
item[changeK] = key
item[changeV] = val
arr.push(item)
})
return arr
}
console.log('res ====== ', handelData(list, 'pro', 'v', 'name', 'value'))
这样的话,就可以对不同的数组复用了,还是很简单吧