JavaScript合并对象同键不同值问题求助(附错误代码)
修正合并对象同名键值的JavaScript代码
你的代码存在几个核心问题:
- 存储数量时用了字符串类型,后续相加会变成字符串拼接而非数值计算
- else分支错误使用
Object.assign(该方法用于合并对象,不适合数值累加) - 函数未返回处理后的目标数组
以下是修正后的代码:
function storage(data) { let object = {}; data.forEach(line => { let [product, quantity] = line.split(' '); // 转换为数值类型,避免字符串拼接 const numQuantity = Number(quantity); if (!object[product]) { object[product] = numQuantity; } else { // 直接进行数值累加 object[product] += numQuantity; } }); // 将对象转换为期望格式的数组并返回 return Object.entries(object).map(([product, quantity]) => `${product} ${quantity}`); } // 测试调用 const result = storage(['tomatoes 10', 'coffee 5', 'olives 100', 'coffee 40']); console.log(result); // 输出: ['tomatoes 10', 'coffee 45', 'olives 100']
关键修正说明:
- 拆分后立即把
quantity转为数字类型,确保累加是数值运算而非字符串拼接 - 移除冗余的
Object.assign调用,直接对对象属性进行数值累加 - 通过
Object.entries将对象转为键值对数组,再用map生成目标格式的字符串数组,最后返回结果
内容的提问来源于stack exchange,提问作者Reddax
相关产品推荐
相关产品推荐

