我想迭代对象并计算嵌套对象中出现的所有值的总和。我似乎无法自行获取数值。
const drunks = {
'Cheryl': { numberOfDrinks: 10 },
'Jeremy': { numberOfDrinks: 4 },
'Gordon': { numberOfDrinks: 2 },
'Laura': { numberOfDrinks: 6 }
}
let totalDrunks = 0
let numberOfDrunks = Object.values(drunks)
numberOfDrunks.forEach((drink) => {
totalDrunks += drunks[drink];
})
console.log (totalDrunks) //Expecting a number value of 22
问题是,当您使用
Object.values(drunks)
时,您会得到一个对象数组。在 forEach
循环中,drink
将表示数组中的每个对象,而不是 numberOfDrinks
的实际数值。
要解决此问题,您需要访问循环中每个对象的
numberOfDrinks
属性并将其添加到 totalDrunks
变量中。这是更正后的代码:
const drunks = {
'Cheryl': { numberOfDrinks: 10 },
'Jeremy': { numberOfDrinks: 4 },
'Gordon': { numberOfDrinks: 2 },
'Laura': { numberOfDrinks: 6 }
}
let totalDrunks = 0;
let numberOfDrunks = Object.values(drunks);
numberOfDrunks.forEach((drink) => {
totalDrunks += drink.numberOfDrinks; // Access the numberOfDrinks property of each object
});
console.log(totalDrunks); // Output: 22
现在,
totalDrunks
变量将正确保存numberOfDrinks
对象中每个对象的drunks
属性的总和。
更换线路:
totalDrunks += drunks[drink];
至
totalDrunks += drink.numberOfDrinks;
reduce()
。
const drinks = {
'Cheryl': { numberOfDrinks: 10 },
'Jeremy': { numberOfDrinks: 4 },
'Gordon': { numberOfDrinks: 2 },
'Laura': { numberOfDrinks: 6 }
}
const totalDrinks = Object.values(drinks)
.reduce((total, person) => total += person.numberOfDrinks, 0);
console.log(totalDrinks)
有几种方法可以循环对象。我不喜欢转换为数组,而只是使用
for in
进行迭代。
所以在这里我循环遍历对象,然后在每个元素上获取
numberOfDrinks
。
const drunks = {
'Cheryl': { numberOfDrinks: 10 },
'Jeremy': { numberOfDrinks: 4 },
'Gordon': { numberOfDrinks: 2 },
'Laura': { numberOfDrinks: 6 }
}
let totalDrunks = 0
for(let drink in drunks){
totalDrunks+= drunks[drink].numberOfDrinks;
}
console.log(totalDrunks)