Динамический набор данных в функции без использования нескольких, если еще

#javascript

Вопрос:

У меня есть приведенный ниже код для тестирования и установки логических переменных firstEmpty,secondEmpty,thirdEmpty. Но в другой проверке мне нужно установить 7 переменных . это займет более 50 лет, если не больше.

Нужна помощь в оптимизации динамического кода.

     dataValidation=(first,second,third)=>{
       let arr = this.state.datafirst;
       var checkfirst = arr.findIndex((item) => item.value === first);
       
       let arr1 = this.state.datasecond;
       var checksecond = arr1.findIndex((item) => item.value === second);
       
        let arr2 = this.state.datathird;
        var checkthird = arr2.findIndex((item) => item.value === third);
      
        if(checkfirst === -1 amp;amp; checksecond === -1 amp;amp; checkthird === -1){
            this.firstEmpty = true;
            this.secondEmpty = true;
            this.thirdEmpty = true; 
            return 0;
        } else if(checkfirst === -1 amp;amp; checksecond === -1) { 
            this.firstEmpty = true;
            this.secondEmpty = true;    
            return 0;          
        } else if(checksecond === -1 amp;amp; checkthird === -1) { 
            this.secondEmpty = true;
            this.thirdEmpty = true;
            return 0;
        }  else if(checkfirst === -1 amp;amp; checkthird === -1) { 
            this.firstEmpty = true;
            this.thirdEmpty = true; 
            return 0;          
        }  else if(checkfirst === -1) { 
            this.firstEmpty = true; 
            return 0;
        }  else if(checksecond === -1) { 
            this.secondEmpty = true;
            return 0;
        }  else if(checkthird === -1) { 
            this.thirdEmpty = true; 
            return 0;
        } else { 
            return 1;
        } 
  }
 

Комментарии:

1. Вы можете использовать массив в HTMLControl и user для цикла в javascript для проверки значения

Ответ №1:

Что касается простой оптимизации существующего кода, я почти уверен, что это делает то же самое:

 dataValidation=(first,second,third)=>{
    let arr = this.state.datafirst;
    let arr1 = this.state.datasecond;
    let arr2 = this.state.datasecond;
    this.firstEmpty = !arr.some((item) => item.value === first);
    this.secondEmpty = !arr1.some((item) => item.value === second);
    this.thirdEmpty = !arr2.some((item) => item.value === third);
    return (this.firstEmpty || this.secondEmpty || this.thirdEmpty) ? 0 : 1;
}
 

Или, возможно, даже более динамичным:

 dataValidation=(first,second,third)=>{
    const data = { first, second, third }
    const retVal = 1;
    Object.keys(data).forEach((key) => {
        let arr = this.state[`data${key}`];
        this[`${key}Empty`] = !arr.some((item) => item.value === data[key]);
        if (this[`${key}Empty`]) retVal = 0;
    });
    return retVal;
}
 

Ответ №2:

попробуйте это

 this.firstEmpty = checkfirst === -1;
this.secondEmpty = checksecond === -1;
this.thirdEmpty = checkthird === -1; 
 

Комментарии:

1. Хотя этот код может дать ответ на вопрос, предоставление дополнительного контекста относительно того, как и/или почему он решает проблему, повысит долгосрочную ценность ответа

Ответ №3:

Я оптимизирую функцию, лежащую ниже. Сейчас это работает. спасибо за весь ответ.

 dataValidation=(first,second,third)=>{
       let arr = this.state.datafirst;
       var checkfirst = arr.findIndex((item) => item.value === first);
       
       let arr1 = this.state.datasecond;
       var checksecond = arr1.findIndex((item) => item.value === second);
       
        let arr2 = this.state.datathird;
        var checkthird = arr2.findIndex((item) => item.value === third);
      
      
      this.dataCheck =1; 
        if(checkfirst === -1 ){  this.firstEmpty  = true;  this.dataCheck =0;} 
        if(checksecond === -1 ){ this.secondEmpty = true; this.dataCheck =0;}  
        if(checkthird === -1 ){ this.thirdEmpty = true; this.dataCheck =0;}  
        
}