Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

151
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda