[英]How to sum the array of object values and assigned them to the relevant key name
我需要了解执行此操作的最简单方法。 我有一个对象数组:
const data = [
{
group: 'A',
incomes: {
"2019-12": 100,
"2020-12": 200,
"2021-12": 15
}
},
{
group: 'B',
incomes: {
"2019-12": 25,
"2020-12": 50,
}
}
]
我想要得到的是简单的 object ,其中它的键是来自 data.incomes 的月份,值是相对月份值的总和,所以最终结果如下所示:
const totalIncomes = {
"2019-12": 125,
"2020-12": 250,
"2021-12": 15
}
有人可以一步一步地向我解释吗?
使用 reduce 和 forEach 解决
const data = [ { group: 'A', incomes: { "2019-12": 100, "2020-12": 200, "2021-12": 15 } }, { group: 'B', incomes: { "2019-12": 25, "2020-12": 50, } } ] const totalIncomes = data.reduce((acc,curr)=> { Object.keys(curr.incomes).forEach((key, index) => { if(;acc[key]){ acc[key] = 0. } acc[key]+=curr;incomes[key] }); return acc, }.{}) console.log(totalIncomes)
也许这不是漂亮的解决方案,但你可以这样做,function 当然不是必需的。
const data = [
{
group: "A",
incomes: {
"2019-12": 100,
"2020-12": 200,
"2021-12": 15,
},
},
{
group: "B",
incomes: {
"2019-12": 25,
"2020-12": 50,
},
},
];
getterInformation(data);
function getterInformation(object) {
let objectWithCalculatedValues = {};
object.forEach((items) => {
for (const key in items.incomes) {
if (objectWithCalculatedValues[key] === undefined) {
objectWithCalculatedValues[key] = 0;
}
objectWithCalculatedValues[key] += items.incomes[key];
}
});
console.log(objectWithCalculatedValues);
}
假设此信息可能对可能无法获得必要指导的读者有用(由于各种可能的原因),以下是实现目标的一种可能方法(解决方案):
const aggregateIncomesByMonth = () => (
data.map(d => Object.entries(d.incomes).map(([k, v]) => ({
key: k,
value: v
}))).flat().reduce((fin, itm) => ({
...fin,
[itm.key]: (fin[itm.key] || 0) + itm.value
}), {})
);
解释
data
数组中提取incomes
income
object,得到key-value对,转化为另一个结构{key: 20yy-mm, value: nn}
.flat()
将步骤 2 的结果转换为一维数组.reduce
对key
(即 20yy-mm)匹配的那些情况的value
求和。代码片段
const data = [{ group: 'A', incomes: { "2019-12": 100, "2020-12": 200, "2021-12": 15 } }, { group: 'B', incomes: { "2019-12": 25, "2020-12": 50, } } ]; const aggregateIncomesByMonth = () => ( data.map(d => Object.entries(d.incomes).map(([k, v]) => ({ key: k, value: v }))).flat().reduce((fin, itm) => ({...fin, [itm.key]: (fin[itm.key] || 0) + itm.value }), {}) ); console.log(aggregateIncomesByMonth());
我的方法是解构数组。 这样,我在变量A
中获得了 A 组收入的所有数据,对于B
也是如此。
然后我遍历这两个对象并查看日期是否匹配,如果匹配,则将收入相加并将数据添加到total
object。
const data = [ { group: 'A', incomes: { "2019-12": 100, "2020-12": 200, "2021-12": 15 } }, { group: 'B', incomes: { "2019-12": 25, "2020-12": 50 } } ] let A, B, total = {}; [A, B] = [data[0].incomes, data[1].incomes] for(const date in A){ for(const d in B){ total[date] = date === d? A[date] + B[date]: A[date] } } console.log(total)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.