You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 19:01:16