#javascript #arrays #function
#javascript #массивы #функция
Вопрос:
Могу ли я сделать что-то подобное, или это будет плохая практика?
file1.js
export func1(param) {
if (valid(param)) return 'valid';
else return 'invalid'
}
export func2(param) {
if (valid(param)) return 'valid';
else return 'invalid'
}
file2.js
import { func1, func2 } from 'file1'
const list = [func1, func2]
function test(value){
list.forEach((listValue) => {console.log(listValue(value));
});
}
у меня много входных данных в моем проекте, и я пытаюсь сократить количество кода для их проверки
текущая реализация выглядит так
file1.js
export validate(type, param){
switch(type){
case TYPE1:
if (valid){
return 'valid';
} else {
return 'invalid';
}
case TYPE2:
if (valid(param.rule)){
return 'valid';
} else {
return 'invalid';
}
default:
break;
}
file2.js
import validate from 'file1.js'
const object = {value: '', types: [
{type: TYPE1, rule: SOME_RULE}
{type: TYPE2, rule: SOME_OTHER_RULE}
]}
function validateObject(object) {
object.types.forEach((type) =>
{console.log(validate(type.type, {
value: object.value,
rule: type.rule}
));}
}
Комментарии:
1. Я не вижу в этом какой-либо особой проблемы, предполагая, что все функции принимают одинаковое количество параметров и их тип совместим.
2. я вроде как новичок, поэтому мне интересно, могу ли я это сделать. как я предполагаю, параметры могут быть объектами типа {value: «, rule1: «, rule2: » }
Ответ №1:
В JavaScript функция — это гражданин первого класса, особый вид объекта, если быть точным, поэтому иметь массив функций — отличная практика.
Ответ №2:
Лично я не думаю, что это плохая практика. Давайте подумаем о том, чтобы приготовить суп, и у вас есть несколько горшков, которые нужно заполнить.
var steps = [ addWater, addPotatoes, addSalt, stirContents, cook ];
var pots = [ small_pot, medium_pot, large_pot ];
// if you use a method list here:
for(pot in pots)
for(step in steps)
steps[step].call(this, pots[pot]);
// if you don't use a method list:
for(pot in pots)
{
addWater(pots[pot]);
addPotatoes(pots[pot]);
addSalt(pots[pot]);
stirContents(pots[pot]);
cook(pots[pot]);
}
если у вас одинаковые входные данные для каждого шага, имеет ли это значение? вы можете добавить еще один шаг к обоим методам.