Tengo un problema con el filtrado de la matriz de objetos con anidamiento de dos niveles.
Tengo 2 matrices, la primera matriz es un anidamiento de un nivel y tengo un código que funciona bien con ella.
const storyId = 2 const arrayOne = [ { name: 'First', storyId: 1, }, { name: 'Second', storyId: 2, }, { name: 'Third', storyId: 3, } ] const result = arrayOne.filter(el => el.storyId === storyId)Pero en mi caso, necesito filtrar la matriz por valor del segundo nivel de anidamiento. Así que tengo un siguiente código:
const storyId = 5 let arrayTwo = [ { name: 'First', id: 1, libraries: { nodes: [ {storyId: 1}, {storyId: 3}, {storyId: 5}, ] } }, { name: 'Second', id: 2, libraries: { nodes: [ {storyId: 4}, {storyId: 5}, {storyId: 6}, ] } }, { name: 'Third', id: 3, libraries: { nodes: [ {storyId: 3}, {storyId: 2}, {storyId: 1}, ] } } ]Y aquí espero obtener una matriz de todos los objetos de primer nivel que tienen bibliotecas internas-> nodos storyId: 5
Dime por favor cómo puedo filtrarlo. Preferiblemente en una línea
No es necesariamente la forma más eficaz, pero solo obtendrá elementos con nodos que tengan un storyId coincidente
arrayTwo.filter(el => el.libraries.nodes.filter(n => n.storyId === storyId).length > 0)))