[英]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.