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

148
Vistas
Rendimiento de JavaScript para iterar y acceder a elementos

Tengo una variedad de elementos que a veces necesito iterar y, a veces, acceder a un miembro directamente. Así que decidí mantener las referencias en dos variables, una matriz y un objeto. Hago algo como esto:

 const itemsArr = []; const itemsObj = {}; const addItem = (data) => { const item = { id: data.id, name: data.name }; itemsArr.push(item); itemsObj[data.id] = item; } const removeItem = (data) => { let i; for (i = 0; i < itemsArr.length; i++) { if (itemsArr[i].id === data.id) { itemsArr.splice(i, 1); break; } } itemsObj[data.id] = null; delete itemsObj[data.id]; } const getWithId = (id) => { return itemsObj[id]; } const getWithName = (name) => { let i; for (i = 0; i < itemsArr.length; i++) { if (itemsArr[i].name === name) { return itemsArr[i]; } } return null }

Así que administro dos objetos y uso uno u otro según la tarea. Siento que esta es la forma más eficaz, pero tal vez haya mejores formas para esto, como un Mapa o Conjunto.

¿Existe una única estructura de datos de JavaScript que supere las matrices en la iteración y los objetos en la búsqueda?

Creo que Object.keys tiene costos de rendimiento adicionales para iterar un objeto, de manera similar Array.filter para buscar en una matriz, por lo que mi intuición es usar matrices para la iteración y objetos para la búsqueda, pero si hay una sola estructura de datos que está optimizada para ambos, me gustaría saber y usar solo un items en mi código.

Gracias

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

0

Primero, para la parte de búsqueda por id, sugeriría un Map , no un objeto. Los objetos están optimizados para el caso de uso de programación común donde su conjunto de propiedades es bastante consistente a lo largo del tiempo (los valores pueden cambiar, pero la forma del objeto [qué propiedades tiene] en su mayoría no lo hace). Map está optimizado como un almacén general de nombre/valor que maneja mejor ese caso de uso. Más en esta página de MDN .

¿Existe una única estructura de datos de Javascript que supere las matrices en la iteración y los objetos en la búsqueda?

No, pero la diferencia en la velocidad de iteración entre un Map y una matriz no importará en la gran mayoría de las aplicaciones. Sí, una matriz será más rápida en la mayoría de los casos (depende un poco de cómo se construya la matriz), pero es muy poco probable que importe.

Pero si solo accede por id o name , no está iterando de todos modos. Es posible que desee dos mapas en lugar de un mapa y una matriz, ya que de esa manera encontrar elementos de cualquier manera es sublineal en lugar de lineal. También hace que el código sea más simple:

 const itemsByName = new Map(); const itemsById = new Map(); const addItem = (data) => { const item = { id: data.id, name: data.name }; itemsByName.set(data.name, data); itemsByid.set(data.id, data); }; const removeItem = (data) => { itemsByName.delete(data.name); itemsByid.delete(data.id); }; const getWithId = (id) => { return itemsById.get(id); }; const getWithName = (name) => { return itemsByName.get(name); };

FWIW, si no tenía itemsByName en lo anterior porque no necesitaba que la búsqueda de name fuera sublineal, así es como se vería el código para getWithName usando itemsById :

 const getWithName = (name) => { for (const item of itemsById.values()) { if (data.name === name) { return data; } } return null; };
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