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

183
Vistas
Javascript: filtre la matriz de objetos en función de los valores de la matriz de una manera eficiente

Digamos que tengo un conjunto de datos que se ve a continuación:

 const fruits = [ { fruit: "banana", price: 100 }, { type: "apple", price: 200 }, { item: "grape", price: 150 }, // And so on... ]; const rotten = ["banana", "orange", /* And so on...*/];

Necesito filtrar los elementos que contienen uno de los valores en la matriz 'podrida' de la matriz 'frutas'.

Algunas caracteristicas:

  1. Los nombres clave en los objetos 'frutas' son inconsistentes. Solo sabemos que los valores de cadena correspondientes están ahí. Sé que no es óptimo, pero lamentablemente arreglar esto no es una opción a corto plazo.
  2. La longitud real de 'frutas' es ~100 y la de 'podrido' es ~10. Así que este no es un pequeño conjunto de datos. (Hay un contexto para decir esto...)

Ya intenté revisar cada elemento en 'podrido' y usar Object.values(obj).includes() para cada elemento en 'frutas' para eventualmente crear una matriz filtrada, pero considerando el tamaño del conjunto de datos, esto es costoso y yo necesitará una mejor manera de manejar esto.

¿Cuál podría ser una mejor manera de hacer esto? ¿Alguna sugerencia? ¡Muchas gracias por adelantado!

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

0

Es inusual (y no práctico) que todos sus objetos de entrada usen diferentes propiedades para almacenar la misma información (fruta, tipo, artículo...). Por lo tanto, realmente debería mejorar la fuente de estos datos.

Pero dado que es así, tendrás que escanear cada propiedad de cada objeto y compararlo con los nombres de las frutas podridas. Este último se puede poner en un Set , lo que reducirá la complejidad de tiempo de la búsqueda:

 const fruits = [ { fruit: "banana", price: 100 }, { type: "apple", price: 200 }, { item: "grape", price: 150 }, ]; const rotten = ["banana", "orange"]; let rottenSet = new Set(rotten); let result = fruits.filter(item => !Object.values(item).some(value => rottenSet.has(value)) ); console.log(result);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puedes probar esto.

 const fruits = [ { fruit: "banana", price: 100 }, { type: "apple", price: 200 }, { item: "grape", price: 150 } ]; const rotten = ["banana", "orange"]; const stringfyFruites = JSON.stringify(fruits); let filterdArray = []; rotten.forEach((value) => { const regexstr = '{[\\w":,\\s]+' + value + '[\\w":,\\s]+}'; const matchedobject = stringfyFruites .match(new RegExp(regexstr, "gm")) ?.map((a) => JSON.parse(a)); if (matchedobject?.length) filterdArray = [...filterdArray, ...matchedobject]; });
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