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
相关产品推荐
相关产品推荐

