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

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

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 Relatório

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 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