令人困惑的标题让我解释一下。
我有一系列类别和产品系列。
产品数组是一个对象数组,其中一个键是类别,它本身就是一个对象数组,其中一个感兴趣的键是标题。
类别数组也是一个对象数组。
我想过滤产品数组,只返回我所选类别的产品(设置状态)
我已经得到了这个,但它不起作用:
filterCategories = () => {
return this.state.products.filter((product => {
return product.categories.map((cat) => {
cat.title == this.state.chosenCategory
})
}))
}
这种方法似乎应该如此。据我所知,我通过映射每个产品来过滤产品数组,然后映射产品类别并检查类别标题是否等于状态中的标题。很明显我在某个地方出了问题。有谁能看到它?
示例数据:
products = [
{
id: '123',
title: 'wine',
categories: [
{title: 'drinks'}
]
}
]
categories = [
{
id: '123',
title: 'drinks'
}
]
答案 0 :(得分:1)
看起来您想要测试类别标题的任何是否与selectedCategory匹配:因此,请使用some
方法。此外,更好的是,如果您确定只有一个匹配类别,请使用.find
代替filter
。还要确保在内部函数的末尾返回一个值(您当前没有这样做),或者使用带隐式返回的箭头函数:
filterCategories = () => (
this.state.products.find((product) => (
product.categories.some(({ title }) => (
title === this.state.chosenCategory
))
))
)
答案 1 :(得分:0)
过滤回调函数是一个谓词,用于测试数组的每个元素。你没有从内部地图函数返回任何东西,你必须在那里有一个过滤器,如
filterCategories = () => {
return this.state.products.filter((product => {
return product.categories.filter((cat) => {
return cat.title == this.state.chosenCategory
})
}))
}