Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中重构方法_Javascript_Refactoring - Fatal编程技术网

如何在Javascript中重构方法

如何在Javascript中重构方法,javascript,refactoring,Javascript,Refactoring,我写了以下三种方法: 方法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.filte

我写了以下三种方法:

方法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)));

您可以像这样重构

var arrs=[{price:1500},{price:1900},{price:2000}] var obj={a:[],b:[],c:[]} arrs.filterfunctionitem{
ifitem.price您可以创建这样一个函数,该函数接受参数,并根据您的偏好将and&&替换为或| |替换为,如果它应该匹配所有参数或至少一个参数

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

我同意尼娜·斯科尔斯的方法。不管怎样,作为对OP问题的100%符合回答

如何重构将筛选文本作为参数的方法


对工作代码的重构请求在这里是无关紧要的。是否适合这样做questions@hindmost,是的,但这需要工作代码,而这不是为该要求提供的。尼娜,你能为我解释一下你的方法吗?我不理解它们?过滤器数组包含所有需要的回调函数,这些回调函数返回一个用于过滤的布尔值。如果一个回调函数返回条件函数数组的真值,则返回真值。需要所有函数返回回调数组的真值。我认为您的答案非常高级。我是JS新手,所以现在很难理解它。但是非常感谢,无论如何!!!!!您的代码与我的代码有什么不同。我认为非常相似。所以我不确定这是对我要求的回答。你们所有的回答都很好。但我认为阿尔穆萨的回答正是我想要的。谢谢你们所有人!!!!
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"))