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

ES6 Node.js中如何对Map对象所有值求和,现有代码报错如何修复?

问题修复方案

错误原因

  • Map构造函数的传参格式不符合规范:Map构造函数仅接收1个可迭代的键值对集合类型的参数,你当前传入了多个独立普通对象,且普通对象默认不属于可迭代类型,构造函数初始化时尝试读取迭代方法失败,直接抛出TypeError: undefined is not a function错误。
  • 标准的Map初始化入参为二维数组结构,每个子项为[键名, 键值]的键值对。

修复方案

方案1:直接按规范初始化Map

如果你是手动写Map的初始值,直接改成二维数组传参即可,原求和逻辑不需要修改:

// 正确的Map初始化格式
let addInput = new Map([
  ["key1", 10],
  ["key2", 5],
  ["key3", 7],
  ["key4", 17]
]);

let sum = 0;
addInput.forEach((v) => {
  sum += v;
});

console.log(sum); // 输出结果为39

方案2:从多个普通对象生成Map

如果你的源数据本身就是多个独立的对象,可以先合并所有对象,再通过Object.entries()转为可迭代的键值对集合后传入Map构造函数:

// 源对象列表
const sourceObjs = [{"key1":10}, {"key2":5}, {"key3":7}, {"key4":17}];
// 合并为单个对象后转Map
const mergedObj = Object.assign({}, ...sourceObjs);
let addInput = new Map(Object.entries(mergedObj));

let sum = 0;
addInput.forEach((v) => sum += v);
console.log(sum); // 输出结果为39

可选优化

如果不需要保留遍历过程,可以直接提取Map的所有值转为数组后用reduce求和,代码更简洁:

const sum = Array.from(addInput.values()).reduce((prev, curr) => prev + curr, 0);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:15:04