Как вставить переменную с бинарной операцией между чисел?

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

→ Ссылка
Автор решения: ThisMan

Просто для галочки покажу вариант без 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] как раз таки выбираем нужную команду и вызываем ее

→ Ссылка