Подтвердить что ты не робот

Как преобразовать строку в математический оператор в javascript

Если у меня есть строка, которая является математическим уравнением, и я хочу разбить ее, а затем вычислить. Я знаю, что могу использовать функцию eval() для этого, но мне интересно, есть ли альтернативный способ сделать это - в частности, сначала разбивая строки. Итак, у меня есть что-то вроде

var myString = "225 + 15 - 10"
var newString = myString.split(" ");

Это превратит myString в массив: [ "225", "+", "15", "-", "10" ];

Моя следующая задача - превратить все строки с нечетными номерами в целые числа, что, я думаю, можно использовать parseInt(); для. Мой вопрос: как превратить "+" и "-" в реальные арифметические операторы? Так что в конце мне остается математическое выражение, которое я могу вычислить?

Возможно ли это?

4b9b3361

Ответ 1

var math_it_up = {
    '+': function (x, y) { return x + y },
    '-': function (x, y) { return x - y }
}​​​​​​​;

math_it_up['+'](1, 2) == 3;

Ответ 2

Функция JavaScript eval была упомянута в комментарии Оливера Моргана, и я просто хотел очистить, как вы могли бы использовать eval в качестве решения вашей проблемы.

Функция eval принимает строку, а затем возвращает значение этой строки, рассматриваемой как математическая операция. Например,

eval("3 + 4")

вернет 7 как 3 + 4 = 7.

Это помогает в вашем случае, потому что у вас есть массив строк, который вы хотите обрабатывать как математические операторы и операнды, которые они представляют.

myArray = ["225", "+", "15", "-", "10"]; 

Без преобразования любой из строк в вашем массиве в целые числа или операторы вы можете написать

eval(myArray[0] + myArray[1] + myArray[2]);

который будет переведен на

eval("225" + "+" + "15");

который будет переведен на

eval("225 + 15");

который вернет 240, значение добавляет 225 к 15.

Или даже более общий:

eval(myArray.join(' '));

который будет переведен на

eval("225 + 15 - 10");

который вернет 230, значение добавления от 15 до 225 и вычитает 10. Таким образом, вы можете увидеть, что в вашем случае может быть возможно пропустить преобразование строк в вашем массиве в целые числа и операторы, и, как сказал Оливер Морган, просто eval это.

Ответ 3

Рассмотрите возможность использования isNaN(Number(array[x])) и a switch для всего, что не удовлетворяет условию.