You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:50:31