簡體   English   中英

鏈接多個過濾器(如果存在條件)

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

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