Javascript返回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; });

在switch语句中对数组进行筛选的正确方法是什么

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
?正如我所写的,
这个
可能不是你在一个。