[英]JavaScript: how to iteratively filter an array?
我希望能夠過濾具有一個或多個條件的數組。
考慮此示例數據和過濾條件:
var data = [
{company: "Acme", fiscal_period: '01-2019', value: 10},
{company: "Acme", fiscal_period: '02-2019', value: 15},
{company: "Wonka", fiscal_period: '01-2019', value: 8},
{company: "Wonka", fiscal_period: '02-2019', value: 11}
]
var filter = [{field: "company", value: "Acme"}]
console.log(myFilterFunction(data,filter));
// Desired output
// [
// {company: "Acme", fiscal_period: '01-2019', value: 10},
// {company: "Acme", fiscal_period: '02-2019', value: 15}
// ]
// Now use two filters:
var filter = [{field: "company", value: "Acme"},{field: "fiscal_period", value: "01-2019"}]
console.log(myFilterFunction(data,filter);
// Desired output
// [
// {company: "Acme", fiscal_period: '01-2019', value: 10},
// ]
但是如何編寫 myFilterFunction 呢?
我知道如何讓它與靜態過濾器一起工作:
myFilterFunction = function(data,filter){
return data.filter(function(el){
return el[filter.field] === filter.value;
});
}
console.log(myFilterFunction(data,{field: "company", value: "Acme"});
但是如果我想有多個過濾器,如何讓它動態工作?
傳遞多個字段的數據作為陣列和使用Array#every
方法來檢查哪個返回所有濾波器true
只有當所有的返回值是true
。
myFilterFunction = function(data,filters){
return data.filter(function(el){
return filters.every(filter => el[filter.field] === filter.value);
});
}
console.log(myFilterFunction(data,[{field: "company", value: "Acme"},{field: "value", value: 10}]));
var data = [{ company: "Acme", fiscal_period: '01-2019', value: 10 }, { company: "Acme", fiscal_period: '02-2019', value: 15 }, { company: "Wonka", fiscal_period: '01-2019', value: 8 }, { company: "Wonka", fiscal_period: '01-2019', value: 11 } ] myFilterFunction = function(data, filters) { return data.filter(function(el) { return filters.every(filter => el[filter.field] === filter.value); }); } console.log(myFilterFunction(data, [{ field: "company", value: "Acme" }, { field: "value", value: 10 }]));
myFilterFunction = (data,filters) => {
return data.filter(el => filters.every(({ field, value }) => el[field] === value));
}
var data = [{ company: "Acme", fiscal_period: '01-2019', value: 10 }, { company: "Acme", fiscal_period: '02-2019', value: 15 }, { company: "Wonka", fiscal_period: '01-2019', value: 8 }, { company: "Wonka", fiscal_period: '01-2019', value: 11 } ] myFilterFunction = (data,filters) => { return data.filter(el => filters.every(({ field, value }) => el[field] === value)); } console.log(myFilterFunction(data, [{ field: "company", value: "Acme" }, { field: "value", value: 10 }]));
data.filter(el=>{
for(let t in filterArray){
if(el[t]!=filterArray[t]){
return false;
}
}
return true;
})
像這樣
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.