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

如何最优过滤对象数组,筛选同时包含指定技术栈的项?

筛选包含所有过滤条件的数据项最优实现方法

问题背景

给定如下对象数组:

export const data = [
  {
    id: 1,
    company: "Photosnap",
    logo: "./images/photosnap.svg",
    new: true,
    featured: true,
    position: "Senior Frontend Developer",
    role: "Frontend",
    level: "Senior",
    postedAt: "1d ago",
    contract: "Full Time",
    location: "USA Only",
    languages: ["HTML", "CSS", "JavaScript"],
    tools: [],
  },
  {
    id: 2,
    company: "Manage",
    logo: "./images/manage.svg",
    new: true,
    featured: true,
    position: "Fullstack Developer",
    role: "Fullstack",
    level: "Midweight",
    postedAt: "1d ago",
    contract: "Part Time",
    location: "Remote",
    languages: ["Python", "Javascript"],
    tools: ["React"],
  },
  // ...更多数据项
]

需基于过滤数组 const filter = ["HTML","CSS"] 筛选数据,仅保留同时包含所有过滤条件的项(示例中仅第一个数据项符合要求),求最优实现方法。


最优实现方案

核心思路是利用数组原生方法组合实现:用filter()遍历数据集,every()确保过滤条件全匹配,includes()做存在性检查,既高效又语义清晰。

场景1:仅检查languages字段

如果过滤条件只针对languages数组:

const filter = ["HTML", "CSS"];
const filteredData = data.filter(item => 
  filter.every(tag => item.languages.includes(tag))
);

场景2:同时检查languages和tools字段

如果过滤条件可能匹配languages或tools中的任意标签:

const filter = ["HTML", "CSS"];
const filteredData = data.filter(item => {
  const allAvailableTags = [...item.languages, ...item.tools];
  return filter.every(tag => allAvailableTags.includes(tag));
});

方案优势

  1. 性能高效:原生数组方法底层经过优化,执行速度优于手动循环。
  2. 语义明确:every()直接表达“所有条件必须满足”的逻辑,代码可读性强,维护成本低。
  3. 扩展性强:后续若需添加更多可过滤字段(如role、level),只需扩展allAvailableTags的来源即可。

注意事项

  • 原示例中第二个数据项的languages数组存在格式错误(原写法["Python, Javascript"]会把两个语言当作单个字符串),需修正为["Python", "Javascript"]才能正确匹配。
  • 若需忽略大小写匹配,可统一转换为小写后再检查:
    const filteredData = data.filter(item => {
      const lowerCaseLanguages = item.languages.map(lang => lang.toLowerCase());
      return filter.every(tag => lowerCaseLanguages.includes(tag.toLowerCase()));
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 14:56:20