[英]Chaining multiple filters if condition exist
我正在嘗試根據兩個也可能為空的參數范圍(數組)將兩個過濾器鏈接起來,因此f.ex很有可能。 speedlimit=[]
var speedfilter =[240,300]
var pricefilter = [80,120]
var cars = [
{name:'Ferrari', maxspeed:240, price: 100},
{name:'Porsche', maxspeed:220, price: 90},
{name:'Bugatti', maxspeed:300, price: 500}
];
if (speedfilters) {
return cars.filter(function (car) {
return car.maxspeed >= speedfilter[0] && car.maxspeed <= speedfilter[1];
})
} else if (pricefilter) {
return cars.filter(function (car) {
return car.price >= pricefilter[0] && car.price <= pricefilter[1];
})
}
else return cars
上例中的結果應輸出{name:'Ferrari', speed:240, price: 100}
使用javascript filter
的方式是什么? 提前致謝!
您可以通過原型繼承創建filterCar
方法
Array.prototype.filterCar = function(feature, range) {
return this.filter((el) => {
// is the range defined?
if (!!range.length) {
return el[feature] >= range[0] && el[feature] <= range[1];
}
else {
return true;
}
})
};
var cars = [
{name:'Ferrari', speed:240, price: 100},
{name:'Porsche', speed:220, price: 90},
{name:'Bugatti', speed:300, price: 500}
];
var result1 = cars.filterCar('speed', [240, 300])
.filterCar('price', [80, 120]));
var result2 = cars.filterCar('speed', [ ])
.filterCar('price', [80, 120]));
console.log(result1); // [{name: "Ferrari", speed: 240, price: 100}]
console.log(result2); /* [{name: "Ferrari", speed: 240, price: 100},
{name: "Porsche", speed: 220, price: 90}] */
您可以將過濾器包裝為可重用的方法,這可以說明過濾器不可用。
function filterCars(carsArray, property, rangeArray) {
// if rangeArray is not supplied, or is empty, just return the unfiltered input
if(!rangeArray|| rangeArray.length === 0) {
return carsArray;
}
// otherwise filter according to logic
return carsArray.filter(car => car[property] >= rangeArray[0] && car[property] <= rangeArray[1]);
}
可以將其鏈接起來,或者為了提高可讀性依次調用:
function filterCars(carsArray, property, rangeArray) { if(!rangeArray|| rangeArray.length === 0) { return carsArray; } return carsArray.filter(car => car[property] >= rangeArray[0] && car[property] <= rangeArray[1]); } var speedfilter = []; // [240,300] var pricefilter = [80,120] var cars = [ {name:'Ferrari', maxspeed:240, price: 100}, {name:'Porsche', maxspeed:220, price: 90}, {name:'Bugatti', maxspeed:300, price: 500} ]; cars = filterCars(cars,"maxspeed",speedfilter); cars = filterCars(cars,"price",pricefilter); console.log(cars);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.