#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;}
}