我有一个名为rawProjects的项目数组,如下所示:
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的情况下返回包含用户提到的任何一种技术的项目,使用:
const filteredProjects = rawProjects.filter(x => x.technology.some(g => tempArr.includes(g.name)))因此,例如,如果tempTags = [sql, c++]将返回两个项目。
如何实现AND案例,以便只返回包含这两种技术的项目。如果是tempTags = [java, c++],只会返回第一个项目。如果是tempTags = [sql, c++],什么都不会返回?
发布于 2021-02-19 16:41:30
遍历tempTags并检查其中一个.every是否包括:
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"}之后应该有逗号)
https://stackoverflow.com/questions/66281517
复制相似问题