Necesito extraer listImages que tengan un estado de 'Existente' dentro de una matriz. Mi problema es que obtiene su matriz principal.
Datos
lists = [ { "listID": "1", "listImages": [ { "id": "111", "status": "Existing" }, { "id": "222", "status": "Non-Existing" } ] }, { "listID": "2", "listImages": [ { "id": "333", "status": "Non-Existing" } ] } ]Código actual
const images = lists.map((list) => ({ ...list, listImages: (list.listImages?? []).filter( ({ status }) => status === "Existing" ), }));Rendimiento esperado
["111"]Parece que solo quieres obtener la id . Simplemente haga un filter seguido de un map para cada lista. Si desea realizar este proceso en todas las listas y fusionar las matrices en una sola, use flatMap .
lists = [ { "listID": "1", "listImages": [ { "id": "111", "status": "Existing" }, { "id": "222", "status": "Non-Existing" } ] }, { "listID": "2", "listImages": [ { "id": "333", "status": "Non-Existing" } ] } ]; const images = lists.flatMap( list => list.listImages.filter(image => image.status === "Existing").map(image => image.id)); console.log(images);Aquí tienes soluciones tanto imperativas como declarativas . Puede cambiar las funciones con nombre a funciones de flecha y hacer que sea incluso una sola línea, pero no creo que tengamos que seguir ese feo estilo de codificación en el que nadie (ni siquiera usted en el futuro) entiende el código.
lists = [ { "listID": "1", "listImages": [ { "id": "111", "status": "Existing" }, { "id": "222", "status": "Non-Existing" } ] }, { "listID": "2", "listImages": [ { "id": "333", "status": "Non-Existing" } ] } ] // Imperative solution const images = []; lists.forEach(list => { list.listImages.forEach(image => { if(image.status === 'Existing'){ images.push(image.id); } }) }); console.log(images); // Declarative solution const data = lists.flatMap(function getAllImages(list){ return list.listImages; }).filter(function getExistingImages(image) { return image.status === 'Existing'; }).map(function getIds(image){ return image.id }); console.log(data);