0

JavaScript でプログラムを作成していますが、次のことを達成する方法がわかりません。私のプログラムは、「+」、「-」、およびその他の数学演算子などの引数を、実際の演算子に変換したい文字列として受け取ります。例(疑似コード):

function calc(a,b,c, op1,op2){

  output=(a op1 b op2  c)
 }

calc(2,3,4,"+","-")

出力は = 2+3-4 になるはずです。

ただし、オペレーターが何人いるのか、その数は事前にわかりません。つまり、私の目的は 1,"+",2, "-",4,"+","(",5,"+",6,")" を置き換えることです...... .1+2-4+(5+6) と同様.....

これをうまく実装するにはどうすればよいですか?

4

3 に答える 3

4

まあ、あなたは使うことができますevalが、これを簡単に行うことができます:

   var funcs = {
       '+': function(a,b){ return a+b },
       '-': function(a,b){ return a-b }
   };
   function calc(a,b,c, op1,op2){
      return funcs[op2](funcs[op1](a, b), c);
   }

funcs他の演算子を使用してマップを簡単に拡張できます。

于 2013-06-18T19:34:16.063 に答える
1

これは非常に迅速に行われましたが、トリックを実行する必要があります (ここでは JSFiddle ):

function executeMath() {
    if (arguments.length % 2 === 0) return null;
    var initialLength = arguments.length,
        numberIndex = (initialLength + 1)/2,
        numbers = Array.prototype.splice.call(arguments, 0, numberIndex),
        operands = Array.prototype.splice.call(arguments, 0),
        joiner = new Array(arguments.length);
    for (var i = 0; i < numbers.length; i++) {
        joiner[i*2] = numbers[i];
    }
    for (var i = 0; i < operands.length; i++) {
        joiner[1+(i*2)] = operands[i];
    }
    var command = ("return (" + joiner.join('') + ");"),
        execute = new Function(command);
    console.log(command);
    return execute();
}
console.log(executeMath(2, 3, 4, 5, "/", "+", "%"));
于 2013-06-18T20:10:51.553 に答える