JavaScript对象数组使用includes方法过滤失败,求解决方法
问题解决:修正对象数组过滤逻辑及语法错误
原代码存在的两个问题
- 语法错误:对象属性
"name": "Iphone"和"name": "samsung12"末尾缺少逗号,导致JS解析报错。 - 逻辑错误:
wanted.includes(val.filters)是判断wanted数组中是否包含整个filters数组(而非数组内的元素),这和你的需求不匹配。
修改方案
根据你的需求(匹配对象filters数组与目标元素),分两种场景给出代码:
场景1:只要filters包含wanted中任意一个元素就保留
const wanted = ["apple"] const items = [ { "name": "Iphone", "filters": ["phone","apple"] }, { "name": "samsung12", "filters": ["samsung12","samsung"] }, ] let desiredList = items.filter((val) => { // 检查wanted中的元素是否有任意一个存在于当前对象的filters里 return wanted.some(target => val.filters.includes(target)); }); console.log(desiredList); // 输出: [{name: "Iphone", filters: ["phone","apple"]}]
场景2:需要filters包含wanted中所有元素才保留(适合wanted有多个元素的情况)
const wanted = ["apple", "phone"] const items = [ { "name": "Iphone", "filters": ["phone","apple"] }, { "name": "samsung12", "filters": ["samsung12","samsung"] }, ] let desiredList = items.filter((val) => { // 检查wanted中的所有元素都存在于当前对象的filters里 return wanted.every(target => val.filters.includes(target)); }); console.log(desiredList); // 输出: [{name: "Iphone", filters: ["phone","apple"]}]
关键方法说明
Array.prototype.some():遍历数组,只要有一个元素满足条件就返回true。Array.prototype.every():遍历数组,只有所有元素都满足条件才返回true。
内容的提问来源于stack exchange,提问作者lb2020
相关产品推荐
相关产品推荐

