比较 JavaScript 中的 2 张地图

Compare 2 maps in JavaScript

我想问一下是否可以这样做:

const map1 = new Map();
map1.set('1', "led");
map1.set('2', "zeppelin");

const map2 = new Map();
map2.set('1', "led");
map2.set('2', "floyd");

我想比较这两张地图。 我想要一个 console.log() 带有地图的引用。

最后,如果地图相同,我会在 map1 中添加一个新集

map1.set('3', "plant"); 

我想要一个日志来告诉我哪一对是新的 kay-val

谢谢

const map1 = new Map();
map1.set('1', "led");
map1.set('2', "zeppelin");

const map2 = new Map();
map2.set('1', "led");
map2.set('2', "floyd");

let isSame = true;
map1.forEach(function(val, key){
    if(map2.get(key) != val){
    console.log('map1.'+key+' = '+val +' | map2.' + key + ' = 
'+map2.get(key));
    isSame = false;
    }
})
if(isSame){
    map1.set('3', "plant"); 
    map1.forEach(function(val, key){
        console.log('map1.'+key+' => '+val);
    })
}

这是另一个使用 Map#entries() and Array#every() 的解决方案。

此解决方案检查提供的参数是否实际上是地图,如果大小不匹配,则立即 returns false。只有通过所有这些检查,才会对 Map 中的每个键和值进行实际比较,这将大大改进 amortized runtime。在最坏的情况下,运行时间将是 O(n),其中 nmap1.

中 key-value 对的数量

如果需要,键和值的比较是在 strict equality meaning that no deep comparison of arrays or objects is done. One could use lodash#isEqual() 的基础上完成的。对于没有必要的给定示例。

const map1 = new Map();
map1.set("1", "led");
map1.set("2", "zeppelin");

const map2 = new Map();
map2.set("1", "led");
map2.set("2", "floyd");

const map3 = new Map();
map3.set("1", "led");
map3.set("2", "zeppelin");

function areEqual(map1, map2) {
  // early outs
  if(!(map1 instanceof Map) || !(map2 instanceof Map) || map1.size !== map2.size) return false;
  // we know we have to maps with the same amount of keys and values. Now compare them
  return [...map1.entries()].every(([key, value]) => (map2.has(key) && map2.get(key) === value));
}


console.log(areEqual(map1, map2));
console.log(areEqual(map1, map3));