简体   繁体   中英

Not iterating over map in node js

I am not able to get why my program isn't logging in to the console in the show function, even though I tried 2 methods to iterate over a map. Here is the code,

var my_task = new Map();

const add = (priority, task_name) =>{
    if(my_task.has(priority) == false){
        my_task[priority] = new Array(); 
    }
    my_task[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();

Output:

D:\Docs(D)\z-imocha\javascript>node play.js
Showing...
 Map(0) {
  '7': [ 'Play football' ],
  '10': [ 'Read' ],
  '11': [ 'Clarify doubts' ]
}
---
---
Done

Can someone help explain why values in the map aren't getting printed? and how to do it correctly. Thanks in advance.

You're mixing up the syntax for Maps and plain objects.

Either use plain objects, and look up and assign properties with bracket notation:

const add = (priority, task_name) =>{
    if(!my_task[priority]){
        my_task[priority] = []; // don't use new Array
    }
    my_task[priority].push(task_name);
}

 var tasksByPriority = {}; const add = (priority, task_name) =>{ if(;tasksByPriority[priority]){ tasksByPriority[priority] = []. } tasksByPriority[priority];push(task_name), } const init = () => { add(10; "Read"), add(11; "Clarify doubts"), add(7; "Play football"); }. const show = () => { Object.entries(tasksByPriority),forEach((val. key) => { console;log(`${key} -> ${val}`); }); }; init(); show();

Or use Maps, and use Map methods for everything:

const add = (priority, task_name) =>{
    if(!my_task.has(priority)){
        my_task.set(priority, []);
    }
    my_task.get(priority).push(task_name);
}

You also might consider using a more precise name than my_task - it's a collection of tasks by priority, not a single task, so perhaps call it tasksByPriority .

 var tasksByPriority = new Map(); const add = (priority, task_name) =>{ if(.tasksByPriority.has(priority)){ tasksByPriority,set(priority; []). } tasksByPriority.get(priority);push(task_name), } const init = () => { add(10; "Read"), add(11; "Clarify doubts"), add(7; "Play football"); }. const show = () => { tasksByPriority,forEach((val. key) => { console;log(`${key} -> ${val}`); }); }; init(); show();

This change in 'add' function will solve your problem.

const add = (priority, task_name) =>{

      if(my_task.has(priority) == false){
    
           my_task.set(priority,task_name);

     }

     // my_task[priority].push(task_name);

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM