问一个有关 JS 数据的问题

2019-04-21 15:04:10 +08:00
 renmu123

新手提问一个有关 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 就相加

1633 次点击
所在节点    问与答
5 条回复
Mexion
2019-04-21 15:08:14 +08:00
遍历
Septembers
2019-04-21 15:32:07 +08:00
data.concat(newData).reduce((prev, next) => (prev[next.area] = (prev[next.area] || 0) + next.num, prev), {})
ayase252
2019-04-21 15:33:14 +08:00
reduce 成一个{area: value}的对象,然后用 Object.key 遍历中间对象展开成想要的结果
qiayue
2019-04-21 16:55:40 +08:00
中间增加一步,先得到中间结果
{'Shanghai':6, 'Beijing':1}
之后再展开上面的中间结果为
[{area: 'Shanghai', num:6}, {area: 'Beijing', num:1}]
Danswerme
2019-04-21 17:59:46 +08:00
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]
});
});

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/557237

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX