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

JavaScript如何根据指定数组项过滤匹配的JSON数据集

问题原因

你的代码判断逻辑写反了:
你调用的是字符串的includes方法,也就是拿单个角色的filter字符串(比如"PL-8")去检查是否包含整个filterItems数组。

  • 当filterItems只有1个元素时,JS隐式类型转换会把数组转为对应的单字符串,刚好能匹配上,属于巧合生效
  • 当filterItems有多个元素时,数组转字符串会变成逗号拼接的格式(比如"US-7,PL-8"),单个filter值不可能包含这个长字符串,自然无法返回正确结果
正确实现

判断逻辑反过来即可:检查当前角色的filter值是否存在于filterItems数组中,过滤完成后组装成和原数据结构一致的对象返回。

const matchedRoles = rolesData.roles.filter(function(role) {
  return filterItems.includes(role.filter);
});

const result = {
  roles: matchedRoles
};

执行后返回结果完全符合预期:

{
  "roles": [
    {
      "name": "Administrator",
      "filter": "PL-8"
    },
    {
      "name": "Verifyer",
      "filter": "US-7"
    }
  ]
}

如果需要兼容不支持Array.includes的老旧运行环境,可以替换为indexOf写法:

const matchedRoles = rolesData.roles.filter(function(role) {
  return filterItems.indexOf(role.filter) > -1;
});

内容的提问来源于stack exchange,提问作者Codesight

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:21:34