如何返回与单独数组比较时具有匹配值的对象



在我的状态中,我有一个名为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())。这是解决方案的代码沙箱。(检查右下方控制台)

相关内容

  • 没有找到相关文章

最新更新