本文详解如何正确遍历 javascript 中的嵌套对象,提取并累加深层属性(如 `numberofdrinks`)的数值,避免常见索引错误,最终得到准确的总数。
在处理类似 { ‘Cheryl’: { numberOfDrinks: 10 }, … } 这样的键值对结构时,一个典型误区是误将 Object.values() 返回的对象(如 { numberOfDrinks: 10 })当作键名使用,进而尝试用它去反查原对象(如 drunks[drink]),这会导致 undefined,最终累加结果为 NaN 或 0。
正确的做法是:直接访问每个子对象上的目标属性。由于 Object.values(drunks) 返回的是一个由嵌套对象组成的数组(即 [{ numberOfDrinks: 10 }, { numberOfDrinks: 4 }, …]),我们可在 forEach 回调中直接解构或点访问该属性:
const drunks = {
'Cheryl': { numberOfDrinks: 10 },
'Jeremy': { numberOfDrinks: 4 },
'Gordon': { numberOfDrinks: 2 },
'Laura': { numberOfDrinks: 6 }
};
let totalDrunks = 0;
const numberOfDrunks = Object.values(drunks);
numberOfDrunks.forEach(drink => {
totalDrunks += drink.numberOfDrinks; // ✅ 正确:从当前子对象取值
});
console.log(totalDrunks); // 输出:22
更简洁、函数式的方式推荐使用 reduce: