如果我的数组包含的值是一个数组(多个标签),如何过滤该数组,因此它必须包含两个标签。从this example开始,这是我到目前为止的代码。
let articles = [{title: 'title 1', tags :["JavaScript", "ES6"], category: "JavaScript"},{title: 'title 2', tags :["React", "TypeScript"], category: "React"},{title: 'title 3', tags :["JavaScript", "Inheritance", "Prototype"], category: "JavaScript"}]
let search = "ES6";
let search2 = "JavaScript";
let result = articles.filter(((data)=>data.tags.includes(search && search2)))
console.log(result)
但它似乎仅过滤为“两个”,而不是“两个”。在此示例中,我希望它仅返回标题1。
谢谢
答案 0 :(得分:0)
您可以为所需的字符串获取一个数组,并通过短路检查所有字符串。
yes
答案 1 :(得分:0)
let articles = [{
title: 'title 1',
tags: ["JavaScript", "ES6"],
category: "JavaScript"
}, {
title: 'title 2',
tags: ["React", "TypeScript"],
category: "React"
}, {
title: 'title 3',
tags: ["JavaScript", "Inheritance", "Prototype"],
category: "JavaScript"
}]
let search = "ES6";
let search2 = "JavaScript";
let result = articles.filter(((data) => [search, search2].every((tag) => data.tags.includes(tag))))
console.log(result)
使用更简洁的语法的替代方法
let articles = [{
title: 'title 1',
tags: ["JavaScript", "ES6"],
category: "JavaScript"
}, {
title: 'title 2',
tags: ["React", "TypeScript"],
category: "React"
}, {
title: 'title 3',
tags: ["JavaScript", "Inheritance", "Prototype"],
category: "JavaScript"
}]
let search = "ES6";
let search2 = "JavaScript";
let result = articles.filter(((data) => data.tags.includes(search) && data.tags.includes(search2)))
console.log(result)
答案 2 :(得分:0)
我们可以使用集合对每个标签中唯一的数组元素进行搜索:
let search = "ES6";
let search2 = "JavaScript";
let articles = [{tags:["ES6", "JavaScript"]}, {tags:["ES6", "JavaQScript"]}, {tags:[ "JavaScript"]}, {tags:["ES6"]}]
let result = articles.filter((data)=>{const set1 = new Set(data.tags); return (set1.has(search) && set1.has(search2)) })
console.log(result)