Ответ 1
var math_it_up = {
'+': function (x, y) { return x + y },
'-': function (x, y) { return x - y }
};
math_it_up['+'](1, 2) == 3;
Если у меня есть строка, которая является математическим уравнением, и я хочу разбить ее, а затем вычислить. Я знаю, что могу использовать функцию eval() для этого, но мне интересно, есть ли альтернативный способ сделать это - в частности, сначала разбивая строки. Итак, у меня есть что-то вроде
var myString = "225 + 15 - 10"
var newString = myString.split(" ");
Это превратит myString в массив: [ "225", "+", "15", "-", "10" ];
Моя следующая задача - превратить все строки с нечетными номерами в целые числа, что, я думаю, можно использовать parseInt(); для. Мой вопрос: как превратить "+" и "-" в реальные арифметические операторы? Так что в конце мне остается математическое выражение, которое я могу вычислить?
Возможно ли это?
var math_it_up = {
'+': function (x, y) { return x + y },
'-': function (x, y) { return x - y }
};
math_it_up['+'](1, 2) == 3;
Функция 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
это.
Рассмотрите возможность использования isNaN(Number(array[x]))
и a switch
для всего, что не удовлетворяет условию.