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

Node.js中Map遍历无输出原因分析及正确实现方案

问题分析与解决

问题原因

你创建了Map对象,但错误地使用普通对象属性赋值的方式(my_task[priority] = ...)添加数据,而非Map原生的set()方法。这种操作只是给Map实例挂载了额外的对象属性,并没有将数据存入Map的内部键值对存储结构中。因此Map的forEach()和for...of遍历只会读取它内部存储的键值对(此时为空,显示Map(0)),自然没有遍历内容输出。

正确实现方法

修改add函数,使用Map的原生方法has()、get()和set()来操作数据:

var my_task = new Map();

const add = (priority, task_name) =>{
    if(!my_task.has(priority)){
        // 用set方法初始化优先级对应的数组
        my_task.set(priority, []); 
    }
    // 用get方法获取对应优先级的数组,再添加任务
    my_task.get(priority).push(task_name);
}

const init = () => {
    add(10, "Read");
    add(11, "Clarify doubts");
    add(7, "Play football");
};

const show = () => {
    console.log("Showing...\n", my_task);
    console.log("---");
    my_task.forEach((val, key) => {
        console.log(`${key} -> ${val}`);
    });
    console.log("---");
    for(let [key, val] of my_task){
        console.log(`${key} -> ${val}`);
    }
    console.log("Done");
};

init();
show();

运行输出

修改后运行代码,会得到正确的遍历结果:

Showing...
 Map(3) { 10 => [ 'Read' ], 11 => [ 'Clarify doubts' ], 7 => [ 'Play football' ] }
---
10 -> Read
11 -> Clarify doubts
7 -> Play football
---
10 -> Read
11 -> Clarify doubts
7 -> Play football
Done

补充说明

  • Map核心操作方法:set(key, value)添加/更新键值对,get(key)获取对应值,has(key)检查键是否存在,delete(key)删除键值对。
  • 不要混淆Map与普通对象的操作逻辑:普通对象用.或[]操作属性,Map必须用原生方法操作内部存储的键值对,才能被forEach、for...of等遍历方法识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:10:36