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

JS统计数组重复对象数量返回NaN是什么原因?如何获取预期结果?

问题解答

错误原因

你的代码核心问题出在判断条件的取值错误:

  • 你将undefined包裹了双引号,变成了字符串"undefined",但读取对象不存在的属性时,返回的是原始值undefined,二者类型和值都不相等,条件判断永远返回true。
  • 首次访问不存在的属性时,实际取到的是undefined,执行undefined += 1会直接得到NaN,后续所有累加操作都是对NaN计算,最终结果全为NaN。

修复方案

写法1:保留原有逻辑仅修正判断条件

function calcDuplicates(fruitObj) {
  const duplicates = {};
  for (let i of fruitObj) {
    // 用hasOwnProperty判断属性是否已存在,避免原型链属性干扰
    duplicates.hasOwnProperty(i.name)
      ? (duplicates[i.name] += 1)
      : (duplicates[i.name] = 1);
  }
  return duplicates;
}

写法2:更简洁的空值合并写法

function calcDuplicates(fruitObj) {
  const duplicates = {};
  for (const { name } of fruitObj) {
    // 空值合并运算符??:如果属性不存在默认取0再+1
    duplicates[name] = (duplicates[name] ?? 0) + 1;
  }
  return duplicates;
}

两种写法运行后都能得到预期结果{orange: 2, apple: 1, banana: 1}。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:54:03