查找不包括几个键的对象的总和

jac*_*ack 2 javascript

我有一个数组

Result = [{"01": 330,"02": 353,"03": 178,"04": 353,"KID": 10,"PID": 5},
          {"01": 320,"02": 112,"03": 328,"04": 123,"KID": 11,"PID": 6},
          {"01": 110,"02": 253,"03": 375,"04": 233,"KID": 12,"PID": 7}]
Run Code Online (Sandbox Code Playgroud)

我知道如何对所有键进行加法运算,如下所示:

Result.forEach(item =>{
    let sum = Object.keys(item).reduce((acc,value) => acc + item[value],0);
       item["total"] = sum;
    })
Run Code Online (Sandbox Code Playgroud)

如何找到排除"KID""PID"键值的总和?

Nin*_*olz 5

您可以过滤键。

var result = [{ "01": 330, "02": 353, "03": 178, "04": 353, "KID": 10, "PID": 5 }, { "01": 320, "02": 112, "03": 328, "04": 123, "KID": 11, "PID": 6 }, { "01": 110, "02": 253, "03": 375,"04": 233, "KID": 12, "PID": 7 }];

result.forEach(item => item.total = Object
    .keys(item)
    .filter(k => k !== 'KID' && k !== 'PID')
    .reduce((s, k) => s + item[k], 0)
);

console.log(result);
Run Code Online (Sandbox Code Playgroud)

或者,您可以预先获取密钥,然后仅与所需密钥求和。

var result = [{ "01": 330, "02": 353, "03": 178, "04": 353, "KID": 10, "PID": 5 }, { "01": 320, "02": 112, "03": 328, "04": 123, "KID": 11, "PID": 6 }, { "01": 110, "02": 253, "03": 375,"04": 233, "KID": 12, "PID": 7 }],
    exclude = ['KID', 'PID'],
    keys = Object.keys(result[0]).filter(k => !exclude.includes(k));

result.forEach(item => item.total = keys.reduce((s, k) => s + item[k], 0));

console.log(result);
Run Code Online (Sandbox Code Playgroud)