2017-03-07 74 views
1

對象鍵的值。如果我在地圖上添加這些值:如何獲得從地圖

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中的對象鍵的值?

回答

2

你可能會需要的對象的引用:

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

m.set(o, 3); 
m.get(o); //3 
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]);

+0

這是正確的答案 - 幾乎與我即將粘貼的內容相同:) –

+0

但是如果必須在另一個上下文中檢索此密鑰,該怎麼辦?我總是將引用存儲在某個地方的原始鍵對象中? – Simoyw

+0

@Simoyw,是的,否則你失去了參考。您可以將鍵/值對映射到數組中以獲取對象。 –

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));