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:
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!
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);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]; });