JavaScript对象数组嵌套engines数组求和失败,代码求助
解决JavaScript对象数组中嵌套数组求和后原数组无变化的问题
原始数据与问题代码
汽车数据数组
const cars = [ { "id": 1, "car_make": "Lincoln", "car_model": "Navigator", "car_year": 2009, "data": { "rating": 4.9, "engines": [3, 4, 5, 6] } }, { "id": 2, "car_make": "Mazda", "car_model": "Miata MX-5", "car_year": 2001, "data": { "rating": 4.1, "engines": [1, 2] } }, ]
无效果的求和代码
cars.forEach(car => { car.data.engines.reduce((a,b) => a+b,0) }) console.log(cars);
问题原因
reduce方法确实能计算出engines数组的总和,但它仅返回计算结果,不会自动修改原对象的属性。由于你没有将求和结果赋值回原对象的任何属性,所以cars数组的内容完全没有变化。
修改方案
根据需求选择以下两种方式之一:
1. 替换原engines数组为求和结果
如果希望直接用总和替换原来的数组,将reduce的结果赋值给car.data.engines:
cars.forEach(car => { car.data.engines = car.data.engines.reduce((a, b) => a + b, 0); }) console.log(cars);
执行后,每个汽车对象的data.engines会变为求和后的数值(第一个为18,第二个为3)。
2. 新增属性存储求和结果(保留原数组)
如果需要保留原engines数组,新增一个属性(如engineTotal)来存储总和:
cars.forEach(car => { car.data.engineTotal = car.data.engines.reduce((a, b) => a + b, 0); }) console.log(cars);
执行后,每个data对象会新增engineTotal字段,同时原engines数组保持不变。
内容的提问来源于stack exchange,提问作者Metgher Andrei
相关产品推荐
相关产品推荐

