FindIdng对象总和不包括几个键



我有一个数组

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 =>{
    let sum = Object.keys(item).reduce((acc,value) => acc + item[value],0);
       item["total"] = sum;
    })

我如何找到不包括 "KID""PID"键的值之和?

您可以过滤键。

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);

,或者您可以提前取钥匙并只用通缉键总和。

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);

这是您的方法。

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}]
// Execlude someKeys, if they are available in the array then they will be execluded.
var execludedKeys = ["PID", "KID"];
Result.forEach(item =>{
let sum = Object.keys(item).reduce((acc,value) =>
 execludedKeys.indexOf(value) == -1 ? (acc + item[value]) : acc
  ,0);
  item["total"] = sum;
});
    
    console.log(Result)

您可以改用Object.entries,然后进行if检查。

const data = [{"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}]
          
data.forEach(obj => {
  obj.total = Object.entries(obj)
    .reduce((r, [k, v]) => {
      if (k != 'KID' && k != 'PID') r += obj[k]
      return r
    }, 0)
})
console.log(data)

添加过滤器,读取对象键

.filter(k=>!['KID','PID'].includes(k))

let 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=>!['KID','PID'].includes(k))
                     .reduce((acc,value) => acc + item[value],0);
})
    
console.log(Result);

最新更新