首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查子数组是否包含另一个数组javascript的所有元素

如何检查子数组是否包含另一个数组javascript的所有元素
EN

Stack Overflow用户
提问于 2021-02-19 16:37:07
回答 1查看 44关注 0票数 0

我有一个名为rawProjects的项目数组,如下所示:

代码语言:javascript
复制
rawProjects = [
    {
         id: 1,
         name: "proj1",
         technology: [
             0: {id: 21, project_id: 1,name: "java"},
             1: {id: 22, project_id: 1,name: "c++"}
          ]
    },
    {
         id: 2,
         name: "proj2",
         technology: [
             0: {id: 23, project_id: 2,name: "sql"},
             1: {id: 24, project_id: 2,name: "python"},
             2: {id: 25, project_id: 2,name: "react"}

         ]
    }
]

我还有一个名为tempTags的技术数组,它包含用户进入搜索的技术。到目前为止,我已经能够在OR的情况下返回包含用户提到的任何一种技术的项目,使用:

代码语言:javascript
复制
const filteredProjects = rawProjects.filter(x => x.technology.some(g => tempArr.includes(g.name)))

因此,例如,如果tempTags = [sql, c++]将返回两个项目。

如何实现AND案例,以便只返回包含这两种技术的项目。如果是tempTags = [java, c++],只会返回第一个项目。如果是tempTags = [sql, c++],什么都不会返回?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-19 16:41:30

遍历tempTags并检查其中一个.every是否包括:

代码语言:javascript
复制
const rawProjects = [
    {
         id: 1,
         name: "proj1",
         technology: [
             {id: 21, project_id: 1,name: "java"},
             {id: 22, project_id: 1,name: "c++"}
          ]
    },
    {
         id: 2,
         name: "proj2",
         technology: [
             {id: 23, project_id: 2,name: "sql"},
             {id: 24, project_id: 2,name: "python"},
             {id: 25, project_id: 2,name: "react"}

         ]
    }
]

const tempTags = ['java', 'c++'];
const filtered = rawProjects.filter(
  p => {
    const techNames = p.technology.map(({ name }) => name);
    return tempTags.every(
      tag => techNames.includes(tag)
    );
  }
);
console.log(filtered);

您还需要修复语法:数组没有键值对,只有值。(删除0:1:等),并确保在数组值之间放置逗号(在"python"}之后应该有逗号)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66281517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档