Javascript映射有重复的键

Javascript映射有重复的键,javascript,Javascript,Map对象set方法用于添加新密钥/对,或更新现有密钥/对 我一直在努力弄清楚,当我试图用数据库结果填充地图时,我的地图是如何以重复键结束的: let users = new Map(); function loadUserByName(name) { db.loadUser({ name }, (err, user) => { users.set(user.id, user); }); } loadUser('george'); u

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

我一直在努力弄清楚,当我试图用数据库结果填充地图时,我的地图是如何以重复键结束的:

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

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

function loadUserByName(name) {
    db.loadUser({ name }, (err, user) => {
        users.set(String(user.id), user);          
    });
}
根据-映射中的键相等基于“相同值”算法:根据===运算符的语义,键被视为相等。