2015-11-23 4 views
0

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

privateCalculate = function() { 
    var total; 

    for(i = 0; i < init.sequence.length; i++) { 
     if(init.sequence[i] === "+" || init.sequence[i] === "-" || 
      init.sequence[i] === "*" || init.sequence[i] === "/" || 
      init.sequence[i] === "(" || init.sequence[i] === ")") 
     { 
      total += init.sequence[i]; 
     } else { 
      init.sequence[i] = parseFloat(init.sequence[i]); 

      total += init.sequence[i]; 
     } 

    } 

    console.log(eval(total)); 
    //console.log((parseFloat(1)+parseFloat(2))/parseFloat(2)); 
}, 

Функция производит "NaN"

+0

, пожалуйста, распечатайте содержимое 'init.sequence' – webdeb

+0

[" 5 "," + "," 5 "], если logi c предназначен для преобразования «5» в 5 – Conor

+0

. Отбросьте 'parseFloat', ваши строки будут преобразованы в ints с' eval' в любом случае – JCOC611

ответ

1

Вы сказали, что ваш вклад: ["5","+","5"] Вам не нужно разобрать его, потому что eval принимают в качестве параметра String

Просто сделай это:

var inputArray = ["5","+","5"]; 
eval(inputArray.join('')) // -> 10 
+1

Да. Именно то, что я сказал в комментариях. Хотя будьте осторожны, чтобы не разрешить глобальный доступ к аргументам/обратным вызовам функции eval или корыта и т. Д. В этом случае он может быть использован для атак. –

+0

@ RokoC.Buljan два тупых парня, один хотя :) – webdeb

+0

@ RokoC.Buljan правильный 'eval' is ** evil ** – webdeb

Смежные вопросы