我有一个对象,如下所示,如何从每个属性中获取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
答案 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')