Javascript 在 switch 语句中返回过滤数组

AGd*_*dev 2 javascript switch-statement

在 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;
     }
   };
Run Code Online (Sandbox Code Playgroud)

编辑:我找到了下面给出的工作解决方案

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;
   }
Run Code Online (Sandbox Code Playgroud)

});

Nin*_*olz 5

基本上你需要返回过滤后的数组(因此结果undefined),然后你可以省略break语句。

case 'NomAppareil':
    return this.props.machines.filter(machine => {
//  ^^^^^^
       return machine.nomAppareil === filterTerm;
    });
    // break;
Run Code Online (Sandbox Code Playgroud)

或者使用Set代替switch语句。

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;
};
Run Code Online (Sandbox Code Playgroud)