簡體   English   中英

如何通過多個屬性值過濾對象數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM