如何从Map获取对象键的值

时间:2017-03-07 14:34:27

标签: javascript arrays dictionary

如果我在地图上添加这些值:

var m = new Map();
m.set(1, "black");
m.set(2, "red");
m.set("colors", 2);
m.set({x:1}, 3);

m.forEach(function (item, key, mapObj) {
    document.write(item.toString() + "<br />");
});

document.write("<br />");
document.write(m.get(2));
document.write("<br />");
document.write(m.get({x:1}));

打印:

black
red
2
3

red
undefined

为什么我在最后一行获得undefined?有没有办法检索存储在Map中的对象键的值?

3 个答案:

答案 0 :(得分:2)

您可能需要对该对象的引用:

var m = new Map();
var o = {x:1};

m.set(o, 3);
m.get(o); //3

答案 1 :(得分:2)

您需要使用对象引用来获取对象。任何新的文字都是一个新的对象,并且是不同的。

var obj = { x: 1 },
    m = new Map();

m.set(1, "black");
m.set(2, "red");
m.set("colors", 2);
m.set(obj, 3);

m.forEach(function (item, key, mapObj) {
    console.log(item.toString());
});

console.log(m.get(2));
console.log(m.get(obj));
console.log([...m]);

答案 2 :(得分:0)

你因为

而未定义
document.write(m.get({x:1}));

您在此行提取的对象与此处的对象不同

m.set({x:1}, 3);

试试这个:

var m = new Map();
var obj = {x:1};
m.set(1, "black");
m.set(2, "red");
m.set("colors", 2);
m.set(obj, 3);

m.forEach(function (item, key, mapObj) {
    document.write(item.toString() + "<br />");
});

document.write("<br />");
document.write(m.get(2));
document.write("<br />");
document.write(m.get(obj));