新手提问一个有关 JS 数据分类问题
data = [{area: 'Shanghai', num:1}, {area: 'Beijing', num: 1}, {area: 'Shanghai', num:5}]
newData = [{area: 'Shanghai', num:6}, {area: 'Beijing', num:1}]
一个[]里面是多个{},对象里有 area,num。
想要这样的效果,如果 area 相同,那么 num 就相加
1
Mexion 2019-04-21 15:08:14 +08:00 via Android
遍历
|
2
Septembers 2019-04-21 15:32:07 +08:00 3
data.concat(newData).reduce((prev, next) => (prev[next.area] = (prev[next.area] || 0) + next.num, prev), {})
|
3
ayase252 2019-04-21 15:33:14 +08:00
reduce 成一个{area: value}的对象,然后用 Object.key 遍历中间对象展开成想要的结果
|
4
qiayue 2019-04-21 16:55:40 +08:00
中间增加一步,先得到中间结果
{'Shanghai':6, 'Beijing':1} 之后再展开上面的中间结果为 [{area: 'Shanghai', num:6}, {area: 'Beijing', num:1}] |
5
Danswerme 2019-04-21 17:59:46 +08:00 via Android
let obj = {};
data.forEach(i => { if (obj.hasOwnProperty(i.area)) { obj[i.area] += i.num; } else { obj[i.area] = i.num; } }); const newData = []; Object.keys(obj).forEach(key => { newData.push({ area: key, num: obj[key] }); }); |