Necesito ayuda aquí. Buscando una pista para resolver este problema:
El objetivo es filtrar arrayOfObject y obtener todos los objetos con la propiedad fruit que contienen todos los elementos de la matriz dada.
const arrayOfObject = [ { id: 1, country: 'USA', fruits: ["APPLE", "ORANGE", "BANANA"] }, { id: 2, country: 'Canada', fruits: ["APPLE"] }, { id: 3, country: 'France', fruits: ["ORANGE", "BANANA", "LEMON"] }, { id: 4, country: 'Mexico', fruits: ["BANANA", "PYTHON", "CHERRY"] }, { id: 5, country: 'Ukraine', fruits: ["APPLE", "ORANGE", "CHERRY"] }, { id: 6, country: 'Italy', fruits: ["APPLE", "ORANGE", "BANANA", "LEMON", "CHERRY"] } ];Primer ejemplo con esta matriz dada:
const firstArrayOfFruits = ["APPLE","ORANGE","BANANA"];Debería renderizar =>
[ { id: 1, country: 'USA', fruits: ["APPLE", "ORANGE", "BANANA"] }, { id: 6, country: 'Italy', fruits: ["APPLE", "ORANGE", "BANANA", "LEMON", "CHERRY"] } ]Segundo ejemplo con esta matriz dada:
const secondArrayOfFruits = ["APPLE","ORANGE"];Debería renderizar =>
[ { id: 1, country: 'USA', fruits: ["APPLE", "ORANGE", "BANANA"] }, { id: 5, country: 'Ukraine', fruits: ["APPLE", "ORANGE", "CHERRY"] }, { id: 6, country: 'Italy', fruits: ["APPLE", "ORANGE", "BANANA", "LEMON", "CHERRY"] } ]Puedes usar Array.prototype.filter :
const arrayOfObject = [{ id: 1, country: 'USA', fruits: ["APPLE", "ORANGE", "BANANA"] }, { id: 2, country: 'Canada', fruits: ["APPLE"] }, { id: 3, country: 'France', fruits: ["ORANGE", "BANANA", "LEMON"] }, { id: 4, country: 'Mexico', fruits: ["BANANA", "PYTHON", "CHERRY"] }, { id: 5, country: 'Ukraine', fruits: ["APPLE", "ORANGE", "CHERRY"] }, { id: 6, country: 'Italy', fruits: ["APPLE", "ORANGE", "BANANA", "LEMON", "CHERRY"] } ]; const firstArrayOfFruits = ["APPLE", "ORANGE", "BANANA"]; var arr = arrayOfObject.filter(item => item.fruits.filter(fruit => firstArrayOfFruits.indexOf(fruit) + 1).length >= firstArrayOfFruits.length); console.log(arr);El uso de la función some () de ES6 es útil porque cuando encuentra una entrada, devolverá verdadero y no verificará el resto, por lo que puede ahorrar algunos cálculos, tiempo y CPU
const filtered = arrayOfObject.filter(obj => { if(obj.fruits.some(fruit => fruitsLisToCheck.includes(fruit))) return obj }) const fruitsLisToCheck = ['BANANA', 'APPLE']; const arrayOfObject = [ { id: 2, country: 'Canada', fruits: ["APPLE"] }, { id: 3, country: 'France', fruits: ["BANANA"] }, { id: 4, country: 'Mexico', fruits: ["CHERRY"] }, ];