[英]How to filter an array of object by multiple property values?
如果我的數組包含一個數組(多個標簽)的值,我如何過濾數組以便它必須包含兩個標簽。 從這個例子開始,這是我到目前為止的代碼。
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。
謝謝
您可以為想要的字符串獲取一個數組,並通過短路檢查所有字符串。
result = articles.filter(({ tags }) => [search, search2].some(s => tags.includes(s)));
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)
我們可以使用 set 對每個標簽中的唯一數組元素進行搜索:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.