Данный вопрос уже был задан и имеет решение:
Пусть a это string и равняется "5 + 5". Тогда при вызове мне вернут "5 + 5". Но мне нужно получить результат вычисления (то есть не "5 + 5" а 10).
var a = "5 + 5";
var b = new Number (5 + 5); // b будет равно 10
var b = new Number (a); // b будет равно NaN
Каким образом я могу получить результат арифметической операций из строки?
Я бы не советовал использовать eval(), т.к. он не является безопасным методом. Подробнее можете прочитать тут, кроме того там же приведен пример парсера математических формул.
Выше уже писали, что eval ( читай evil ) не очень подходит из-за безопасности, и уж лучше взять какой-нить парсер формул.
Но для полноты картины, вот еще один способ
function calcString(str) {
return (new Function(`return ${str}`))()
}
calcString('5+5');
new Function принимает строку, которая описывает тело. Но опять же, можно передать любую строчку, которая вызовется сразу же, что в перспективе не очень безопасно
Вообще, если у вас уж очень простые формулы, вида a операция b, то можно очень просто парсить
function calcString(str) {
const [a, opr, b] = str.replace(/\s/g, '').split('');
const oprs = {
'+': (a, b) => a + b,
'-': (a,b) => a - b,
'*': (a,b) => a * b,
'/': (a,b) => a / b
}
if(!(opr in oprs)) {
throw new Error('wrong operation');
}
return oprs[opr](parseFloat(a), parseFloat(b));
}
calcString('5 + 5');
Но тут очень много условностей, если нужно что-то сложнее, тогда лучше искать готовое решение
вот библиотека math.js
var a = '5+5'
math.eval('5+5') // => 10
math.eval(a) // => 10
Можно поизучать, код на Github, на предмет реализации собственной функции/парсера. Я понимаю, сложно, но это отличный пример.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости