Estoy tratando de filtrar algunos objetos en función de otra matriz de objetos. Así que estoy obteniendo datos de una API. Estos son por ejemplo recibos:
[ { "id": 1, "name": "test", "category": { "id": 1, "name": "Cookies", }, }, { "id": 2, "name": "test2", "category": { "id": 2, "name": "Candy", }, } ]Luego estoy tratando de filtrar los objetos en el nombre de la categoría en función de otra matriz de categorías. He creado una función para esto:
function onSelectCategory(category) { let receiptsList = receipts.filter((a) => a.category.includes(category.name) ); setReceiptsView(receiptsList); setSelectedCategory(category); } const category = [ { "id": 2, "name": "Candy" } ]; onSelectCategory(category); Cuando ejecuto esta función, obtengo un Array [] vacío. Realmente no puedo entender lo que estoy haciendo mal.
Dado que el parámetro parece ser una matriz de objetos, debe usar Array#some para comparar:
const receipts = [ { "id": 1, "name": "test", "category": { "id": 1, "name": "Cookies" } }, { "id": 2, "name": "test2", "category": { "id": 2, "name": "Candy" } } ]; const categories = [ { "id": 2, "name": "Candy" } ]; const receiptsList = receipts.filter(({ category }) => categories.some(({ name }) => name === category.name) ); console.log(receiptsList); Otra solución usando Set :
const receipts = [ { "id": 1, "name": "test", "category": { "id": 1, "name": "Cookies" } }, { "id": 2, "name": "test2", "category": { "id": 2, "name": "Candy" } } ]; const categories = [ { "id": 2, "name": "Candy" } ]; const categorySet = new Set(categories.map(({ name }) => name)); const receiptsList = receipts.filter(({ category }) => categorySet.has(category.name) ); console.log(receiptsList);Suponiendo que la category (el parámetro) es una cadena, el problema es que está intentando obtener el name del atributo de la cadena, cuando debería comparar la cadena con el objeto.
Prueba esto:
a.category.name == category;en vez de
a.category.includes(category.name) Puede que me equivoque al suponer que la categoría es una cadena, aclare diciéndonos a qué equivale la category del parámetro.