遍历对象计算嵌套对象中的总数

问题描述 投票:0回答:4

我想迭代对象并计算嵌套对象中出现的所有值的总和。我似乎无法自行获取数值。

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
javascript foreach javascript-objects nested-object
4个回答
1
投票

问题是,当您使用

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
属性的总和。


1
投票

更换线路:

totalDrunks += drunks[drink];  

totalDrunks += drink.numberOfDrinks;

0
投票

如果您想使用更实用的方法,您也可以使用

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)


0
投票

有几种方法可以循环对象。我不喜欢转换为数组,而只是使用

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)

© www.soinside.com 2019 - 2024. All rights reserved.