簡體   English   中英

使用.filter過濾對象數組

[英]Filter an array of objects with .filter

如果有JSON對象,如何使用.filter根據過濾器對象過濾數組。

data = [
   {month: 'Sep', name: 'Fred', department: 'Accounting'},
   {month: 'Sep', name: 'David', department: 'Sales'},
   {month: 'Oct', name: 'Jon', department: 'Sales'}
]

filters = {
    month: [],
    name: ['Jon'],
    department: ['Sales','Accounting']
}
 const result = data.filter(entry => {
   for(var key in filters){
     if(filters[key].length && !filters[key].includes(entry[key]) )
        return false;
   }
   return true;
});

你可以filter通過檢查每一個過濾器的主要的對象和它的值包含過濾數組中存在的數據

您可以使用filter()every()方法執行此操作。

 var data = [ {month: 'Sep', name: 'Fred', department: 'Accounting'}, {month: 'Sep', name: 'David', department: 'Sales'}, {month: 'Oct', name: 'Jon', department: 'Sales'} ] var filters = { month: [], name: ['Jon'], department: ['Sales','Accounting'] } var result = data.filter(e => { return Object.keys(filters).every(f => { return filters[f].includes(e[f]) || !filters[f].length }) }) console.log(result) 

 let data = [ { month: 'Sep', name: 'Fred', department: 'Accounting' }, { month: 'Sep', name: 'David', department: 'Sales' }, { month: 'Oct', name: 'Jon', department: 'Sales' } ]; let filters = { month: [], name: ['Jon'], department: ['Sales', 'Accounting'] }; let matches = data.filter(function (o) { // iterate through keys of filter object for (const key in this) { // if filter array is empty and // value is not in filter array if (this[key].length > 0 && !this[key].includes(o[key])) { // object is not match return false; } } // if object passed every filter array // object is match return true; }, filters); console.log(matches); 

一種更緊湊的編寫方式可能是這樣的:

 let data = [ { month: 'Sep', name: 'Fred', department: 'Accounting' }, { month: 'Sep', name: 'David', department: 'Sales' }, { month: 'Oct', name: 'Jon', department: 'Sales' } ]; let filters = { month: [], name: ['Jon'], department: ['Sales', 'Accounting'] }; let matches = data.filter(function (o) { return Object.keys(this).every( key => this[key].length === 0 || this[key].includes(o[key]) ); }, filters); console.log(matches); 

data.filter(obj => filters.month.indexOf(obj.month) > -1 && filters.name.indexOf(obj.name) > -1 && filters.department.indexOf(obj.department) > -1)

暫無
暫無

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

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