在我的状态中,我有一个名为foodLog的对象,该对象保存用户输入的所有条目,其中一个键是foodSelectedKey
,我试图返回所有条目,这些条目具有与该键匹配的值,使用不同的数组称为foodFilter
。
然而,这不起作用,错误说foodLog.filter()
不是一个函数-我已经查过了,这是因为它是一个对象(我认为)。任何帮助将非常感激!
state = {
// log food is for the logged entries
foodLog: {},
// used for when filtering food entries
foodFilter: [],
};
findMatches = () => {
let foodLog = this.state.foodLog;
let foodFilter = this.state.foodFilter;
let matched = foodLog.filter((item) => {
return foodLog.foodsSelectedKey.map((food) => {
return foodFilter.includes(food);
});
});
};
我猜错误Is not a function
背后的原因是对象不能循环。这意味着,如果一个对象没有像数组那样需要迭代的索引,那么就不能迭代其内部有不同变量的对象。同样的道理也适用于map()
,find()
和类似的函数,它们必须使用数组而不是对象来运行。
据我所知,你有一个名为foodLog
的对象,它有一个名为foodsSelectedKey
的数组。我们需要在foodFilter
中找到与数组相交的元素。这是我想出来的:
state = {
// log food is for the logged entries
foodLog: {
foodsSelectedKey: [
{ id: 1, name: "chicken" },
{ id: 2, name: "mashroom" }
]
},
// used for when filtering food entries
foodFilter: [
{ id: 1, name: "chicken" },
{ id: 2, name: "orange" }
]
};
findMatches = () => {
let foodLog = this.state.foodLog;
let foodFilter = this.state.foodFilter;
let matched = foodLog.foodsSelectedKey.filter((key) =>
{
for (let i=0; i<foodFilter.length;i++){
if(foodFilter[i].name===key.name)
return true
}
return false;
}
);
return matched;
};
Output是经过筛选的数组,在本例中,只有一个元素:
[{
id: 1
name: "chicken"
}]
为了检查输出-运行console.log(findMatches())
。这是解决方案的代码沙箱。(检查右下方控制台)