Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

189
Vistas
¿Map () permite actualizar/reemplazar claves?

En Map() con objetos como claves, ¿hay alguna forma de reemplazar/actualizar una clave sin perder el orden de las entradas y, si es posible, sin recrear el mapa completo?

Aquí están mis 3 métodos que probé, el objetivo es reemplazar obj2 en el map con obj4 , manteniendo el orden original:

 const map = new Map(), obj1 = ["o1"], obj2 = ["o2"], obj3 = ["o3"], obj4 = ["o4"]; map.set(obj1, 1); map.set(obj2, 2); map.set(obj3, 3); console.log("original: " + [...map], "expected result: o1,1,o4,2,o3,3"); console.log("1. simple replace object - doesn't work: " + [...func1(new Map(map), obj4, obj2)]); console.log("2. add new and delete old - incorrect order: " + [...func2(new Map(map), obj4, obj2)]); console.log("3. recreate entire map - correct: " + [...func3(new Map(map), obj4, obj2)]); //#1 simple replace object function func1(map, _new, _old) { let obj = map.get(_old); obj = _new; //doesn't work, because it replaces data in a variable, not in the map itself return map; } //#2 add new and delete old function func2(map, _new, _old) { map.set(_new, map.get(_old)); map.delete(_old) return map; } //#3 recreate entire map function func3 (map, _new, _old) { for(let i = 0, update, entries = [...map]; i < entries.length; i++) { if (!update && entries[i][0] != _old) continue; map.delete(entries[i][0]); map.set(update ? entries[i][0] : _new, entries[i][1]); update = true; } return map; }

El n. ° 3 funciona, pero ¿tal vez haya una forma más eficiente?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

No, las claves de mapa siempre se iteran en orden de inserción. Si agrega una nueva clave, se agregará al final.

Lo único en lo que puedo pensar sería, si conoce la forma de los objetos nuevos y antiguos, y no tienen prototipos diferentes (por ejemplo, uno es una matriz y el otro es un objeto) es mutar el existente objeto.

 const map = new Map(), obj1 = ["o1"], obj2 = ["o2"], obj3 = ["o3"], obj4 = ["o4"]; map.set(obj1, 1); map.set(obj2, 2); map.set(obj3, 3); console.log("original: " + [...map], "expected result: o1,1,o4,2,o3,3"); console.log("mutate object: " + [...func1(new Map(map), obj4, obj2)]); function func1(map, newKey, oldKey) { oldKey.length = 0; oldKey.push(...newKey); return map; }

(solo con fines informativos; no recomendaría esto al escribir código serio y fácil de entender)

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda