簡體   English   中英

JavaScript 基於多個數組過濾對象

[英]JavaScript filter objects based on multiple arrays

我想根據一組包含過濾條件的數組過濾對象。 它基本上有效,直到過濾器數組之一包含多個術語。 這是代碼:

 // the filters const filters = { "eyeColor": ["blue"], "gender": ["male"], "age": ["33"], "tags": ["d3js", "vuejs"] // multiple terms in the filter array breaks the code (returns empty array) } // the data const users = [ { "age": "33", "eyeColor": "blue", "tags": "d3js, max, grotesk", "gender": "male", }, { "age": "31", "eyeColor": "blue", "tags": "vuejs, adrian, serif", "gender": "male", }, { "age": "37", "eyeColor": "brown", "tags": "vuejs, max, mono, d3js", "gender": "female", }, { "age": "33", "eyeColor": "blue", "tags": "vuejs, markus, grotesk", "gender": "male", }, ] // the filter function let results = users.filter(function (object) { return Object.entries(filters).every(function ([key, value]) { return value.every(function (filter) { return object[key].includes(filter) }) }) }); console.log(results);

我得到一個空數組,而預期的結果是:

{
   "age": "33",
   "eyeColor": "blue",
   "tags": "d3js, max, grotesk",
   "gender": "male",
},
{
    "age": "33",
    "eyeColor": "blue",
    "tags": "vuejs, markus, grotesk",
    "gender": "male",
}

我怎樣才能得到預期的結果?

代碼使用

return value.every(function (filter) ...
//           ^^^^^

但您不想匹配允許數組中的所有標簽,只匹配some任何):

return value.some(function (filter) ...
//           ^^^^

這是一個演示:

 const filters = { "eyeColor": ["blue"], "gender": ["male"], "age": ["33"], "tags": ["d3js", "vuejs"] } const users = [{ "age": "33", "eyeColor": "blue", "tags": "d3js, max, grotesk", "gender": "male", }, { "age": "31", "eyeColor": "blue", "tags": "vuejs, adrian, serif", "gender": "male", }, { "age": "37", "eyeColor": "brown", "tags": "vuejs, max, mono, d3js", "gender": "female", }, { "age": "33", "eyeColor": "blue", "tags": "vuejs, markus, grotesk", "gender": "male", }, ]; const filterEntries = Object.entries(filters); const results = users.filter(user => filterEntries.every(([key, permitted]) => permitted.some(e => user[key].includes(e)) ) ); console.log(results);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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