Javascript Map有重复的键

时间:2016-08-24 10:41:42

标签: javascript

Map对象set方法用于添加新密钥/对,或更新现有密钥/对。 See docs

当我尝试用数据库结果填充它时,我一直在努力弄清楚我的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

1 个答案:

答案 0 :(得分:2)

地图可以将对象作为关键字。并且仅仅因为两个对象输出为相同的字符串,并不意味着它们是同一个对象。上述代码可以通过将user.id转换为字符串来修复,即:。

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