No puedo descifrar cómo usar correctamente .filter() para encontrar un objeto en una matriz buscando un valor en su matriz anidada.
tengo los siguientes datos:
const orders = [ { id: 1, items: [ { itemId: "abc", }, { itemId: "def", }, ], }, { id: 2, items: [ { itemId: "jkl", }, { itemId: "mno", }, ], }, { id: 3, items: [ { itemId: "abc", }, { itemId: "xyz", }, ], }, ]; Tengo el itemId: "abc" que necesito usar para encontrar todos los objetos que tienen elementos que también tienen el Id de "abc", por lo que el resultado es este:
[ { id: 1, items: [ { itemId: "abc", }, { itemId: "def", }, ], }, { id: 3, items: [ { itemId: "abc", }, { itemId: "xyz", }, ], }, ]Hasta ahora, he intentado lo siguiente:
orders && orders.filter((order) => { return order.items.filter((item) => item.itemId === "abc"); });Pero no parece funcionar. ¿Que me estoy perdiendo aqui?
Chris G se me adelantó en los comentarios pero tiene razón, necesitas usar order.items.some en tu función interna:
const orders = [{ id: 1, items: [{ itemId: "abc", }, { itemId: "def", }, ], }, { id: 2, items: [{ itemId: "jkl", }, { itemId: "mno", }, ], }, { id: 3, items: [{ itemId: "abc", }, { itemId: "xyz", }, ], }, ] var ans = orders.filter((order) => { return order.items.some((item) => item.itemId === "abc"); }); console.log(ans) const orders = [{ id: 1, items: [{ itemId: "abc", }, { itemId: "def", }, ], }, { id: 2, items: [{ itemId: "jkl", }, { itemId: "mno", }, ], }, { id: 3, items: [{ itemId: "abc", }, { itemId: "xyz", }, ], }, ]; const result = orders.filter(order => order.items.find(item => item.itemId === 'abc') !== undefined ) console.log(result);