2016-08-24 100 views
0

Map对象set方法是为了添加一个新的键/对,或者更新现有的键/对。 See docsJavascript Map有重复键

我一直在努力弄明白是怎么回事,我的地图已经结束了重复键,当我试图与数据库结果来填充它:

let users = new Map(); 

function loadUserByName(name) { 
    db.loadUser({ name }, (err, user) => { 
     users.set(user.id, user);   
    }); 
} 

loadUser('george'); 
users.forEach((item) => { console.log(item.key); }); 
// Output: 
// 57bbfcb47ff30b00db69ae87 

loadUser('george'); 
users.forEach((item) => { console.log(item.key); }); 
// Output: 
// 57bbfcb47ff30b00db69ae87 
// 57bbfcb47ff30b00db69ae87 

回答

0

一个地图可以有一个对象作为重点。只是因为两个对象输出为相同的字符串,并不意味着它们是同一个对象。 - 主要平等

function loadUserByName(name) { 
    db.loadUser({ name }, (err, user) => { 
     users.set(String(user.id), user);   
    }); 
} 
+1

根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map:上面的代码可以通过铸造user.id作为字符串即固定在Maps中基于“相同值”算法:根据===运算符的语义,键被认为是相等的。 –