如何在Javascript中重构方法
我写了以下三种方法: 方法1:如何在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
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"))