I’m trying to filter some products with the categories (by the woocommerce API) but i have a little trouble to do it. do you have the right way to do it? thanks
My array from the API :
{id: 199, name: "Dark Suit", slug: "dark-suit", permalink: "https://caisse.diliko.fr/produit/dark-suit/", date_created: "2020-08-20T10:53:06", …}
categories: Array(2)
0:
id: 30
name: "Clothing"
slug: "clothing"
__proto__: Object
1: {id: 31, name: "Men's Clothing", slug: "mens-clothing"}
length: 2
__proto__: Array(0)And my filter function:
export const getProductsById = (products, id) => (
products.filter(product => product.categories.name == id)
);Advertisement
Answer
Here’s what you want, I reckon. A filter that checks whether any of the categories of the product has the id you’re looking for.
products = [
{
id: 199,
name: "Dark Suit",
categories: [
{
id: 30,
name: "Clothing",
slug: "clothing"
},
{
id: 31,
name: "Suits",
slug: "suits"
}
]
},
{
id: 200,
name: "Light Suit",
categories: [
{
id: 30,
name: "Clothing",
slug: "clothing"
},
{
id: 31,
name: "Suits",
slug: "suits"
}
]
},
{
id: 201,
name: "Banana",
categories: [
{
id: 2,
name: "Fruit",
slug: "fruit"
},
{
id: 3,
name: "Yellow",
slug: "yellow"
}
]
},
{
id: 201,
name: "Orange",
categories: [
{
id: 2,
name: "Fruit",
slug: "fruit"
},
{
id: 4,
name: "Orange",
slug: "orange"
}
]
}
];
console.log(filter(31)); //suits
console.log(filter(2)); // fruit
console.log(filter(3)); // yellow
function filter(categoryId) {
return products.filter(product=>product.categories.some(element=>element.id==categoryId));
}