如何根据条件添加对象数组的值? 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; }