Tengo una matriz de objetos, cada uno de los cuales contiene matrices y quiero fusionarlos si cada matriz contiene display: true . Soy muy nuevo en la manipulación de matrices, y agradecería mucho un empujón en la forma correcta.
Matriz de ejemplo:
{ "first": [ { "name": "John", "surname": "Doe", "display": true }, { "name": "Jane", "surname": "Doe", "display": false } ], "second": [ { "name": "Sarah", "surname": "Doe", "display": true } ] }Ejemplo de resultado esperado:
[ { "name": "John", "surname": "Doe", "display": true }, { "name": "Sarah", "surname": "Doe", "display": true } ] Ya tengo un código javascript para configurar cada tecla de display en verdadero/falso según la consulta de búsqueda. Solo necesito que la matriz se fusione para que coincida con el resultado esperado.
Puede obtener todos los valores y filtrar la matriz plana.
const data = { first: [{ name: "John", surname: "Doe", display: true }, { name: "Jane", surname: "Doe", display: false }], second: [{ name: "Sarah", surname: "Doe", display: true }] }, result = Object .values(data) .flat() .filter(({ display }) => display); console.log(result); .as-console-wrapper { max-height: 100% !important; top: 0; }Use un reductor y filtre los valores dentro del valor de la propiedad de display . Finalmente aplanar el resultado:
const mergedByDisplay = Object.entries({ "first": [{ "name": "John", "surname": "Doe", "display": true }, { "name": "Jane", "surname": "Doe", "display": false } ], "second": [{ "name": "Sarah", "surname": "Doe", "display": true }] }) .reduce((acc, [_, val]) => [...acc, val.filter(v => v.display)], []) .flat(); console.log(mergedByDisplay); .as-console-wrapper { max-height: 100% !important; top: 0; }