获取嵌套对象属性的总和

时间:2019-01-03 04:21:36

标签: javascript

我有一个对象,如下所示,如何从每个属性中获取ca的总值

var temp1 = {test1: {ca:1, ba:2, da: 3}, test2: {ca:1, ba:2, da: 3}, test3: { ba:2, da: 3}} 

有时temp1只能由一个属性(如test1)组成,因此为了满足这种情况,我认为应该找到对象的第一个属性。但是当test2 test3到来时,我不能使用0。此外,属性ca可以存在或不存在。

temp1[Object.keys(temp1)[0]]

我已经尝试过并且正在获得输出,但是我们可以改善这一点吗

 var arr = []
Object.keys(temp1).forEach(o => {
   Object.keys(temp1[o]).forEach(so => {
     if(so === "ca"){
       arr.push(temp1[o][so])
     }
  })
})

arr.reduce((a,b) => a + b)

预期输出为

 var total = 2

2 个答案:

答案 0 :(得分:2)

您可以在Object.values()上方reduce(),可以通过ca之类的短路捕获未定义的ca || 0 -如果是ca否则定义为0:

var temp1 = {test1: {ca:1, ba:2, da: 3}, test2: {ca:1, ba:2, da: 3}, test3: { ba:2, da: 3}} 

let sum = Object.values(temp1).reduce((sum,{ca}) => sum + (ca || 0), 0)
console.log(sum)

答案 1 :(得分:1)

遍历对象,并检查密钥是否存在。如果是这样,则将值添加到变量

var temp1 = {
  test1: {
    ca: 1,
    ba: 2,
    da: 3
  },
  test2: {
    ca: 1,
    ba: 2,
    da: 3
  },
  test3: {
    ba: 2,
    da: 3
  }
}

function valueOfKeyToGet(key) {
  let val = 0;
  for (let keys in temp1) {
    if (temp1[keys][key] !== undefined) {
      val += temp1[keys][key];
    }
  }
  console.log(val)
}
valueOfKeyToGet('ca')