如何根据条件添加对象数组的值? JS
How to Add the values of an object array based on a condition? JS
我希望根据对象的值对对象的字段求和
例如,我有一个数组:
[
{
"month": 4,
"periodDays": 1,
"expected": 5
},
{
"month": 5,
"periodDays": 10,
"expected": 40
},
{
"month": 5,
"periodDays": 11,
"expected": 35
},
{
"month": 6,
"periodDays": 8,
"expected": 20
}
]
我想要:
[
{
"month": 4,
"periodDays": 1,
"expected": 5
},
{
"month": 5,
"periodDays": 21,
"expected": 75
},
{
"month": 6,
"periodDays": 8,
"expected": 20,
},
我知道我可以使用减速器,但我不能让它在一定条件下工作。
您可以使用 Array.reduce()
创建所需的结果。
我们首先使用 month
值作为键创建一个映射。然后我们将 periodDays 和预期值初始化为零。
对于每个对象,我们然后添加 periodDays 并期望得到每个对象的总和。
最后,我们使用Object.values()
将我们的地图变成一个数组:
let input = [ { "month": 4, "periodDays": 1, "expected": 5 }, { "month": 5, "periodDays": 10, "expected": 40 }, { "month": 5, "periodDays": 11, "expected": 35 }, { "month": 6, "periodDays": 8, "expected": 20 } ]
const result = Object.values(input.reduce((acc, { month, periodDays, expected }) => {
acc[month] = acc[month] || { month, periodDays: 0, expected: 0 };
acc[month].periodDays += periodDays;
acc[month].expected += expected;
return acc;
}, {}));
console.log('Result:', result)
.as-console-wrapper { max-height: 100% !important; }
我希望根据对象的值对对象的字段求和
例如,我有一个数组:
[
{
"month": 4,
"periodDays": 1,
"expected": 5
},
{
"month": 5,
"periodDays": 10,
"expected": 40
},
{
"month": 5,
"periodDays": 11,
"expected": 35
},
{
"month": 6,
"periodDays": 8,
"expected": 20
}
]
我想要:
[
{
"month": 4,
"periodDays": 1,
"expected": 5
},
{
"month": 5,
"periodDays": 21,
"expected": 75
},
{
"month": 6,
"periodDays": 8,
"expected": 20,
},
我知道我可以使用减速器,但我不能让它在一定条件下工作。
您可以使用 Array.reduce()
创建所需的结果。
我们首先使用 month
值作为键创建一个映射。然后我们将 periodDays 和预期值初始化为零。
对于每个对象,我们然后添加 periodDays 并期望得到每个对象的总和。
最后,我们使用Object.values()
将我们的地图变成一个数组:
let input = [ { "month": 4, "periodDays": 1, "expected": 5 }, { "month": 5, "periodDays": 10, "expected": 40 }, { "month": 5, "periodDays": 11, "expected": 35 }, { "month": 6, "periodDays": 8, "expected": 20 } ]
const result = Object.values(input.reduce((acc, { month, periodDays, expected }) => {
acc[month] = acc[month] || { month, periodDays: 0, expected: 0 };
acc[month].periodDays += periodDays;
acc[month].expected += expected;
return acc;
}, {}));
console.log('Result:', result)
.as-console-wrapper { max-height: 100% !important; }