2014-12-10 2 views
0

В настоящее время у меня есть следующий массив в javascript.Доступ к операторам в массивах Javascript

array = [2, 3, "+"] 

Моя цель состоит в том, чтобы написать код, который будет принимать второй элемент массива (массив [1]), выполнить все, что оператор в элементе 3 (массив [2]) к элементу 1 (массив [0]).

Например, код должен быть в состоянии сделать следующее.

[2,3,"+"] должен вывести 5 (3 + 2)

[2,4,"*"] должен выводить 8 (4 * 2)

В настоящее время я могу писать код, который будет возвращать "3 + 2" и "4 * 2", как но он не будет выполнять операцию.

Любая помощь была бы принята с благодарностью!

ответ

3

Вы могли использовать eval(), но вместо открытия вверх, что может червей, почему бы вам не использовать что-то вроде ...

var operators = { 
    '+': function(a, b) { return a + b; }, 
    '*': function(a, b) { return a * b; } 
}; 

var result = operators[array[2]](array[0], array[1]); 

Если вы хотите использовать eval(), убедитесь, что вы подтверждаете, что операнды ар e только числа, а оператор - из белого списка действительных операторов. В частности, если вы используете пользовательский ввод.

1

Создайте карту оператора и соответствующего метода и вызвать этот метод с операндами, но если вы хотите быстро и грязный раствор просто сделать Eval (опасно ввод от пользователя)

> eval('2+3') 
5 
0

Что-то вроде кода ниже легко реализовать.

var result; 
var s; 

switch (array[2]) { 
    case "+": 
     result = array[0] + array[1]; 
     s = result + "(" + array[0] + " " + array[2] + " " + array[1] + ")"; 
     break; 
    case "-": 
     result = array[0] - array[1]; 
     s = result + "(" + array[0] + " " + array[2] + " " + array[1] + ")"; 
     break; 
    ... 
} 
0

Для выполнения выражения используйте функцию eval, как показано ниже.

eval(array[1] + array[2] + array[0]); 
Смежные вопросы