簡體   English   中英

如何用另一個對象數組過濾一個對象數組(里面有數組)

[英]How to filter an array of objects (with arrays inside) with another array of objects

我有這兩個數組:

filters:
        {
            location: ['Swiss cottage','Fulham'],
            age: ['Giga'],
        }

data: 
[
  {
    "location": "Swiss cottage",
    "ages": "Giga",
  },
  {
    "location": "Fulham",
    "ages": "Kilo",
  },
  {
    "location": "Putney",
    "ages": "Micro",
  }
]

我想用第一個過濾第二個,我該怎么做?

你可以做這樣的事情。 如果是任一過濾器,請將&&更改為|| .

 let filters = { location: ['Swiss cottage','Fulham'], age: ['Giga'], } let data= [ { "location": "Swiss cottage", "ages": "Giga", }, { "location": "Fulham", "ages": "Kilo", }, { "location": "Putney", "ages": "Micro", } ] let x = data.filter(d => { if (filters.location.includes(d.location) && filters.age.includes(d.ages)) return d; }); console.log(x);

您可以通過檢查具有值的條目的每個鍵來獲取具有可迭代數據集的filters條目並過濾data

因此,您只能獲得與filter所有屬性匹配的對象。

這種方法要求filterdata具有相同的屬性名稱。

AND 方法與Array#every

所有搜索的屬性必須匹配。

 var filters = { location: ['Swiss cottage', 'Fulham'], ages: ['Giga'] }, data = [{ location: "Swiss cottage", ages: "Giga" }, { location: "Fulham", ages: "Kilo" }, { location: "Putney", ages: "Micro" }], entries = Object.entries(filters), result = data.filter(o => entries.every(([k, v]) => v.includes(o[k]))); console.log(result);

OR 方法與Array#some

一個搜索的屬性必須匹配。

 var filters = { location: ['Swiss cottage', 'Fulham'], ages: ['Giga'] }, data = [{ location: "Swiss cottage", ages: "Giga" }, { location: "Fulham", ages: "Kilo" }, { location: "Putney", ages: "Micro" }], entries = Object.entries(filters), result = data.filter(o => entries.some(([k, v]) => v.includes(o[k]))); console.log(result);

 const filters = { location: ['Swiss cottage','Fulham'], age: ['Giga'], }; const data = [ { "location": "Swiss cottage", "ages": "Giga", }, { "location": "Fulham", "ages": "Kilo", }, { "location": "Putney", "ages": "Micro", } ]; const output = data.filter(item => { return filters.location.indexOf(item.location) > -1 && filters.age.indexOf(item.ages) > -1; }); console.log(output)

很簡單,“過濾器”對象中的數組需要包含相應的值。

let filteredData = data.filter((x) => 
        filters.location.includes(x.location) && 
        filters.age.includes(x.ages));

暫無
暫無

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

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