簡體   English   中英

如何重構Javascript中的方法

[英]how can I refactor methods in Javascript

我編寫了以下3種方法:

方法號。 1:

var carYear = cars.filter(function(item) {
  if (item.year > 1999) {
    return item;
  };
})

方法號。 2

var carVolvo = cars.filter(function(item) {
  if (item.make == 'Volvo') {
    return item;
  };
});

方法號。 3

var carPrice = cars.filter(item => item.price < 5000);

如何重構以過濾器文本作為參數的方法?

以及如何將所有這些重構為一個方法,該方法將過濾器文本和類型作為參數?

您可以將過濾器移到一個數組中,然后檢查是否只有一個過濾器與實際汽車(或狀況)匹配,或者所有過濾器與汽車(和狀況)匹配。

filters = [
    item => item.year > 1999,
    item => item.make == 'Volvo',
    item => item.price < 5000
];

onlyOneFilter = cars.filter(car => filters.some(fn => fn(car)));
allFilters = cars.filter(car => filters.every(fn => fn(car)));

我會選擇Nina Scholz的方法。 無論是對OP問題的100%合規回答

如何重構以過濾器文本作為參數的方法?

function filterSwitcher(filterText) {
    switch(filterText) {
        case "year":
            return item => item.year > 1999
        case "make":
            return item => item.make == 'Volvo'
        case "price":
            return item => item.price < 5000
    }
}

cars.filter(filterSwitcher("price"))

您可以像這樣重構

 var arrs = [{price:1500},{price:1900},{price:2000}] var obj = {a:[],b:[],c:[]} arrs.filter(function(item){ if(item.price<1600){ obj.a.push(item) return }else if(item.price<2000) { obj.b.push(item) return }else{ obj.c.push(item) return } }) 

您可以創建一個這樣的函數來接受參數,並根據自己的喜好將AND(&&)替換為OR(||),如果它應該匹配所有參數或至少一個參數。

function filterCars(year, make, price) {
    return cars.filter(c => c.year > year && c.make === make && c.price < price);
}

暫無
暫無

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

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