-4

我想做没有按钮的计算器。你能帮我计算函数吗?我有两个数组,第一个数组是数字,第二个是算术运算符。在函数计算中,我必须从第一个数组发送一个元素,从第二个数组发送一个元素,但它不起作用。在最后的节目中必须给出答案作为数字。你能解释一下reduce方法吗,我可以发送第二个数组作为参数吗?因为在文档中我发现它只对元素求和。如果有人用函数编写方法 reduce 的示例,我将不胜感激。这是我的代码。

var str = ("1+1+1+1-1*3");
var reg = /(\d+\.\d+)|\d+/g;

var myArray = str.match(reg);
var reg1 = /['+','-','*',"/"]/g;
var myArray2 = str.match(reg1);

console.log(myArray);
console.log(myArray2);



var i = 0;


function calculate(prev,curr,i){
if(myArray2[i] === "+"){
    // 
    curr = parseInt(prev,10)+parseInt(curr,10);
}

    else if(myArray2[i]==='-'){
        //
    curr = prev-curr;}

    else if(myArray2[i] ==='*'){
        //
        return prev*curr;
    }

    else{
        //
        return prev/curr;
    }
    }
var finAns = myArray.reduce(calculate);
alert ("Answer = " +finAns);
4

1 回答 1

1

是的,您可以使用reduce(参见MDN)与您自己的功能,但这里有一些错误:

  1. 您应该从索引 1 开始计算,因为对于第一个元素 ( index = 0),您有curr = prev = the first element(这里是 1)
  2. 您的正则表达式与符号不匹配-(您应该转义它)

我做了一个 jsfiddle:http: //jsfiddle.net/6UyUq/


编辑:它没有考虑@Jim Wharton 的评论中显示的运算符优先级.....

于 2013-05-27T13:00:36.790 回答