我有以下对象数组。
const dataSet = [
{
createdOn: '2020-06-01',
id: 1,
value: 12
},
{
createdOn: '2020-06-01',
id: 2,
value: 23
},
{
createdOn: '2020-06-02',
id: 3,
value: 40
},
{
createdOn: '2020-06-03',
id: 4,
value: 15
}
]
我想返回的是下面的内容。
[
{
createdOn: '2020-06-01',
value: 35 // sum of 12 + 23
},
{
createdOn: '2020-06-02',
value: 75 // sum of 35 + 40
},
{
createdOn: '2020-06-03',
value: 90 // sum of 75 + 15
}
]
所以我想要的结果是:
createdOn
日期,则其 value
应将其添加到一个单一的对象中。createdOn
键。value
然后还需要加在一起,形成一个累积的value
的对象。在通过SO搜索了一下之后,我发现 一些代码 这有助于我实现第一点。
dataSet.reduce((acc, cur) => {
const date = cur.createdOn
const found = acc.find(elem => elem.createdOn === date)
if (found) {
found.value += cur.value
} else {
acc.push(cur)
}
return acc
}, [])
我只是不知道如何实现累计价值的部分。
先谢谢你,祝你周末愉快。
我会这样做。首先计算每一个不同的累积值 createdOn
值,然后将结果映射回数组。
const map = dataSet.reduce((acc, {createdOn, value}) => {
acc[createdOn] = value + (acc[createdOn] || 0);
return acc;
}, {});
const result = Object.entries(map).map(([key, value], index) => ({
createdOn: key,
value: value
}));
result.forEach((item, index) => {
if (index) {
item.value += result[index - 1].value;
}
});
这个怎么样?
var dataSet = [ { createdOn: '2020-06-01', id: 1, value: 12 }, { createdOn: '2020-06-01', id: 2, value: 23 }, { createdOn: '2020-06-02', id: 3, value: 40 }, { createdOn: '2020-06-03', id: 4, value: 15 }];
var finalResult = Object.values(dataSet.reduce((acc, {createdOn, value})=>{
acc[createdOn] = acc[createdOn] || {createdOn, value:0};
acc[createdOn].value+=value;
return acc;
},{})).map((e,i,self)=>(e.value+=self[i-1] ? self[i-1].value : 0, e));
console.log(finalResult);