我有一个名为 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++]
,什么都不会返回?
答案 0 :(得分:1)
迭代 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"}
后应该有一个逗号)