Как вставить переменную с бинарной операцией между чисел?
this.arrMethods = [{
met: '+',
getResult(str) {
return +str[0] this.met +str[1];
},
}];
Это кусок кода, где +str[0] равен 3, а str[1] равен 5, нужно сделать так, чтобы между ним был плюс из this.met, но как это реализовать, я не понимаю.. Мне нужно, чтобы обязательно бинарным вычислением было то, что находится в met, так что просто поставить + не вариант.
Ответы (2 шт):
так что просто поставить + не вариант.
Как раз это единственный и верный вариант. Можно еще через eval сделать, но за это вас быстро сожгут на костре.
Изучите паттерн проектирования "комманда" и "простая фабрика" это поможет реализовать задуманное. Второе - для выбора класса реализации, а первый паттерн - для реализации нужной операции. Может быть вместо "команда" можно использовать "стратегия", где например стратегия SumStrategy в методе handle(a, b) будет возвращать a + b
Если без паттернов, то решается всё через switch/case
Просто для галочки покажу вариант без eval, но тут придется и ваш код немного поправить
const commands = {
'+': (a, b) => a + b,
'-': (a, b) => a - b
}
this.arrMethods = [{
met: '+',
getResult(str) {
// сюда для подстраховки добавить проверку, что commands[this.met] существует
return commands[this.met](+str[0], +str[1]);
},
}];
commands хранит список команд и их реализацию, через commands[this.met] как раз таки выбираем нужную команду и вызываем ее