quiero preguntar si es posible hacer esto:
const map1 = new Map(); map1.set('1', "led"); map1.set('2', "zeppelin"); const map2 = new Map(); map2.set('1', "led"); map2.set('2', "floyd");Quiero comparar estos 2 mapas. Quiero tener un console.log() con las deferencias de los mapas.
Finalmente, si los mapas son iguales y agrego en map1 un nuevo conjunto
map1.set('3', "plant");quiero un log que me diga cual es el nuevo par de kay-val
Gracias
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); }) }Aquí otra solución usando Map#entries() y Array#every() .
Esta solución verifica que los parámetros proporcionados sean en realidad mapas e inmediatamente devuelve false si el tamaño no coincide. Solo si se pasan todas esas comprobaciones, se realiza una comparación real de cada clave y valor dentro del Map , lo que mejorará en gran medida el tiempo de ejecución amortizado . En el peor de los casos, el tiempo de ejecución será O(n) , siendo n el número de pares clave-valor en map1 .
La comparación de claves y valores se realiza sobre la base de una igualdad estricta , lo que significa que no se realiza una comparación profunda de matrices u objetos. Uno podría usar lodash#isEqual() si ese es un requisito. Para el ejemplo dado eso no es necesario.
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));