用另一个对象过滤对象

时间:2019-11-19 06:08:01

标签: reactjs object filter

我希望在我正在努力的React中获得一些过滤方面的帮助。

我有2个对象,一个具有要过滤的配方的对象,以及一个具有我要与之过滤配方对象的所有ID的对象(filterIds)。每个食谱都包含一个json字符串(ingredients),我必须首先对其进行解析,然后再进行工作...之后,我要检查我的食谱是否至少具有与filtersIds对象相同的成分。

我当前正在使用every,如果每种成分都在我的filtersIds对象中,则返回true。但是,当食谱中的成分多于filtersIds对象中的成分时,is也会返回false。下面是我的代码:

let filterIds = this.state.selectedIngredients.map(a => parseFloat(a.id));

const filteredArray = this.state.recipes.filter(recipe => {
    let ingredients = JSON.parse(recipe.ingredients).map(a => parseFloat(a.id));
    return (ingredients.every(ingredient => filterIds.indexOf(ingredient) >= 0));
});

代码有效,仅当我过滤配方的确切成分时,它才返回我的配方。我要检查的是食谱是否至少具有filterIds中的所有内容,而不是完全相同的值和数量。基本上,我的过滤器功能应该可以缩小用户的搜索范围。

1 个答案:

答案 0 :(得分:0)

您当前正在检查ingredients数组中是否包含filterIds数组的所有元素。但是,您需要检查filterIds数组中是否包含ingredients数组的所有元素。

return (filterIds.every(filterId => ingredients.indexOf(filterId) >= 0));
相关问题