Estoy tratando de filtrar cada estado inicial donde tags[0].number > 10 y tags[1].number < 20
const initialState = [{ id: 1, name: 'Product A', image: 'pic-001.jpg', tags: [{ id: 1, number: 12 }, { id: 2, number: 10 }], }, { id: 2, name: 'Product B', image: 'pic-002.jpg', tags: [{ id: 1, number: 0 }, { id: 2, number: 102 }] }, { id: 3, name: 'Product C', image: 'pic-003.jpg', tags: [{ id: 1, number: 1202 }, { id: 2, number: 100 }] } ] console.log(initialState.filter(e => e.tags[0].number > 10)) initialState.filter(e => e.tags[0].number > 10) devuelve el resultado incorrecto.
¿Cómo puedo filtrar la matriz anidada en una matriz de objetos?
El método Array.filter() siempre crea una nueva matriz de elementos filtrados según la condición aplicada.
Demostración en vivo :
// Input array const initialState = [{ id: 1, name: 'Product A', image: 'pic-001.jpg', tags: [{ id: 1, number: 12 }, { id: 2, number: 10 }], },{ id: 2, name: 'Product B', image: 'pic-002.jpg', tags: [{ id: 1, number: 0 }, { id: 2, number: 102 }] },{ id: 3, name: 'Product C', image: 'pic-003.jpg', tags: [{ id: 1, number: 1202 }, { id: 2, number: 100 }] }]; // Filtere data based on the condition. const filteredData = initialState.filter(({ tags }) => tags[0].number > 10 && tags[1].number < 20); // Output console.log(filteredData);Pruebe esto y el filtro devuelve una nueva matriz
const filteredArr = arr.filter(obj => obj.tags[0].number > 10 && obj.tags[1].number < 20 )Eso funciona para mí, pero
const initialState = [ { id:1 , name: 'Product A', image: 'pic-001.jpg', tags:[{id:1 , number : 12}, {id:2 , number : 10}] }, { id:2 , name: 'Product B', image: 'pic-002.jpg', tags: [{id:1 , number : 0}, {id:2 , number : 102}] }, { id:3 , name: 'Product C', image: 'pic-003.jpg', tags: [{id:1 , number : 1202}, {id:2 , number : 100}] }] //filter each initialState tags[0].number > 10 const filteredItems = initialState.filter(e => e.tags[0].number > 10 ); //filter each initialState tags[1].number < 20 const filteredItems2 = initialState.filter(e => e.tags[1].number < 20 ); //filter each initialState tags[0].number > 10 AND initialState tags[1].number < 20 const filteredItems3 = initialState.filter(e => e.tags[1].number < 20 && e.tags[0].number > 10 ); console.log(filteredItems3);Solo olvidaste un "}" en el estado inicial.