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

为何JavaScript的reduce方法无法统计对象数组中的燃料类型总数?

问题分析与解决:统计fuelType数量结果全为0的原因

你的代码存在两个关键问题,导致统计结果全部为0:

1. 首次计数初始化逻辑错误

在reduce的回调函数中,当遇到新的fuelType时,你将其计数初始化为0,但当前元素本身就是该类型的第一个实例,正确的初始值应该是1。原代码的错误逻辑:

else acc[fuel] = 0;

这会导致每种fuelType第一次出现时计数被设为0,后续即使有相同类型,累加也会从0开始,最终所有统计值都少算一个实例,甚至单个实例的类型会直接显示为0。

2. 对象属性名大小写不匹配

数组中第三个飞船对象的燃料类型属性名是FuelType(首字母大写F),但代码中始终使用cur.fuelType(小写f)获取值,这会导致该对象的cur.fuelType返回undefined,最终统计结果里会多出一个undefined的键,值同样为0。


修正后的代码

let spaceships = [{
    homePlanet: 'Earth',
    color: 'silver',
    fuelType: 'Turbo Fuel',
    numCrew: 5,
    flightPath: ['Venus', 'Mars', 'Saturn']
  },
  {
    homePlanet: 'Venus',
    color: 'space gray',
    fuelType: 'Rocket Fuel',
    numCrew: 4,
    flightPath: ['Venus', 'Pluto', 'Saturn']
  },
  {
    homePlanet: 'Neptune',
    color: 'gold',
    fuelType: 'Diesel', // 统一属性名为小写fuelType
    numCrew: 7,
    flightPath: ['Mercury', 'Mars', 'Jupiter']
  },
  {
    homePlanet: 'Earth',
    color: 'silver',
    fuelType: 'Gasoline',
    numCrew: 2,
    flightPath: ['Saturn', 'Mars', 'Venus']
  },
  {
    homePlanet: 'Earth',
    color: 'silver',
    fuelType: 'Rocket Fuel',
    numCrew: 8,
    flightPath: ['Saturn', 'Saturn', 'Jupiter']
  },
  {
    homePlanet: 'Jupiter',
    color: 'space gray',
    fuelType: 'Turbo Fuel',
    numCrew: 3,
    flightPath: ['Jupiter', 'Mercury', 'Venus']
  },
];

const totalFuelType = spaceships.reduce(function(acc, cur) {
  const fuel = cur.fuelType;
  if (acc[fuel]) {
    acc[fuel]++;
  } else {
    acc[fuel] = 1; // 首次出现时初始化为1
  }
  return acc;
}, {});

console.log(totalFuelType);

运行结果

修正后控制台会输出正确的统计结果:

{
  "Turbo Fuel": 2,
  "Rocket Fuel": 2,
  "Diesel": 1,
  "Gasoline": 1
}

如果不想修改原数组的属性名,也可以在获取燃料类型时兼容大小写,比如用const fuel = cur.fuelType || cur.FuelType;,但更推荐统一属性名的大小写,避免后续出现类似问题。

内容的提问来源于stack exchange,提问作者Jack Averill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:25:22