fer*_*ndo 4 javascript arrays reduce object
我需要这方面的帮助,我需要按 id 和 sum 分组,但我需要为每个结果创建一个新对象
let data =[
{"id":"2018", "name":"test", "total":1200},
{"id":"2019", "name":"wath", "total":1500},
{"id":"2019", "name":"wath", "total":1800},
{"id":"2020", "name":"zooi", "total":1000},
]
Run Code Online (Sandbox Code Playgroud)
我有这段代码只返回一个带有结果的对象
let result = data.reduce(function (r, o) {
(r[o.id])?
r[o.id] += o.total:
r[o.id] = o.total;
return r;
});
Run Code Online (Sandbox Code Playgroud)
但我需要一些这样的
[
{"id":"2018", "name":"test", "total":1200},
{"id":"2019", "name":"wath", "total":2300},
{"id":"2020", "name":"zooi", "total":1000},
]
Run Code Online (Sandbox Code Playgroud)
有什么建议吗,谢谢
let data =[
{"id":"2018", "name":"test", "total":1200},
{"id":"2019", "name":"wath", "total":1500},
{"id":"2019", "name":"wath", "total":1800},
{"id":"2020", "name":"zooi", "total":1000},
];
let map = data.reduce((prev, next) =>{
if (next.id in prev) {
prev[next.id].total += next.total;
} else {
prev[next.id] = next;
}
return prev;
}, {});
let result = Object.keys(map).map(id => map[id]);
console.log(result);Run Code Online (Sandbox Code Playgroud)
你可以试试这个:
const result = Object.values(data.reduce((r, o) => (r[o.id]
? (r[o.id].total += o.total)
: (r[o.id] = {...o}), r), {}));
Run Code Online (Sandbox Code Playgroud)