Javascript返回switch语句内的过滤数组
在switch语句中对数组进行筛选的正确方法是什么Javascript返回switch语句内的过滤数组,javascript,switch-statement,Javascript,Switch Statement,在switch语句中对数组进行筛选的正确方法是什么 let filteredMachines = (filterTerm,filterField) => { switch (filterField) { case 'NomAppareil':this.props.machines.filter(machine => { return machine.nomAppareil === filterTerm; });
let filteredMachines = (filterTerm,filterField) => {
switch (filterField) {
case 'NomAppareil':this.props.machines.filter(machine => {
return machine.nomAppareil === filterTerm;
});
break;
case 'CodeAppareil':this.props.machines.filter(machine => {
return machine.codeAppareil === filterTerm;
});
break;
case 'NomClient':this.props.machines.filter(machine => {
return machine.nomClient === filterTerm;
});
break;
case 'CodeClient':this.props.machines.filter(machine => {
console.log('inside CodeClient ='+JSON.stringify(machine));
return (machine.codeClient == filterTerm);
});
break;
case 'NoSerie':this.props.machines.filter(machine => {
return machine.noSerie === filterTerm;
});
break;
default: return this.props.machines;
}
};
编辑:我找到了下面给出的工作解决方案
let filteredMachines = machines.filter((machine) =>{
switch (filterField) {
case 'NomAppareil': return machine.nomAppareil === filterTerm;
case 'CodeAppareil': return machine.codeAppareil === filterTerm;
case 'NomClient': return machine.nomClient === filterTerm;
case 'CodeClient': return machine.codeClient === filterTerm;
case 'NoSerie': return machine.noSerie === filterTerm;
default: return true;
}
})) 你可以这样做
var filters = ["NomAppareil","CodeAppareil","NomClient","CodeClient","NoSerie"],
result = filters.indexOf(filterField) !== -1 ? this.props.machines.filter(machine => machine[filterField] === filterTerm)
: this.props.machines;
基本上,您需要返回过滤后的数组(因此是
undefined
result),然后可以省略break语句
case 'NomAppareil':
return this.props.machines.filter(machine => {
// ^^^^^^
return machine.nomAppareil === filterTerm;
});
// break;
let filteredMachines = (filterTerm, filterField) => {
var set = new Set(['NomAppareil', 'CodeAppareil', 'NomClient', 'CodeClient', 'NoSerie']);
return set.has(filterField) ?
this.props.machines.filter(machine => machine[filterField] === filterTerm) :
this.props.machines;
};
或者使用而不是开关
语句
case 'NomAppareil':
return this.props.machines.filter(machine => {
// ^^^^^^
return machine.nomAppareil === filterTerm;
});
// break;
let filteredMachines = (filterTerm, filterField) => {
var set = new Set(['NomAppareil', 'CodeAppareil', 'NomClient', 'CodeClient', 'NoSerie']);
return set.has(filterField) ?
this.props.machines.filter(machine => machine[filterField] === filterTerm) :
this.props.machines;
};
主要问题是什么?上面的代码不起作用,或者您正在搜索优化(重构)方法?代码不起作用请添加一些用例和想要的结果以及您得到的错误。为什么不直接执行
this.props.machines.filter(machine=>machine[filterField]==filterTerm)
machine是一个Json对象使用Set
iterable对象的部分非常聪明。这是当之无愧的+1。我不知道这个引用的是什么,也不知道你的对象是什么样子。如果应用filteredMachines
的分配,可能必须首先检查对象是否存在。this.props.machines控制台使用值记录ok。仍然未定义返回。能否在filteredMachines
中为此.props.machines
创建控制台.log
?正如我所写的,这个
可能不是你在一个。