-4

ボタンのない電卓を作りたいです。関数の計算について教えてください。私は2つの配列を持っています。最初の配列は数値で、2番目は算術演算子です。関数計算では、最初の配列から 1 つの要素を送信し、2 番目の配列から 1 つの要素を送信する必要がありますが、機能しません。最終的なプログラムでは、答えを数字として与えなければなりません。reduce メソッドについて説明してもらえますか? 2 番目の配列をパラメーターとして送信できますか? ドキュメントでは、要素を合計するだけであることがわかりました。関数を使用したメソッド 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

はい、独自の関数で ( MDNreduceを参照) を使用できますが、ここにはいくつかのエラーがあります。

  1. index = 0最初の要素 ( ) にはcurr = prev = the first element(ここでは 1)があるため、インデックス 1 で計算を開始する必要があります。
  2. 正規表現がシンボルと一致しません-(エスケープする必要があります)

私は jsfiddle を作成しました: http://jsfiddle.net/6UyUq/


編集:@Jim Whartonのコメントに示されているように、演算子の優先順位は考慮されていません.....

于 2013-05-27T13:00:36.790 に答える