2011-10-31 2 views
0

다음 배열이 있습니다.문자열 배열의 자바 스크립트 산술 연산자

위의 각 기호를 배열에 추가하려면 다음 변수를 사용하십시오.

var right_digit = 1; 
var left_digit = 5; 

JS에서 다음과 같은 작업을 수행 할 수 있습니까?

var answer = left_digit sign[0] right_digit; 
+0

왜 그걸하고 싶니? 그러한 모든 구현은'1 + 5'보다 느립니다. –

+0

그것은 임의로 기호를 선택해야하는 게임입니다. – Neutralizer

답변

7

당신이 평가 피하고 싶은 경우에 당신은 같은 것을 수행 할 수 있습니다

var signs = { 
    '+': function(op1, op2) { return op1 + op2; }, 
    ... 
}; 

var answer = signs['+'](left_digit, right_digit); 
+0

저는이 방법을 사용할 것입니다. – Neutralizer

0

동적 그런 식으로 운영을 평가하려는 경우가 eval를 사용할 수 있습니다

var answer = eval(right_digit + sign[0] + left_digit); 

주 평가 '의 사용이 때문에 potentional 보안 문제로 그렇게하지 않는 것이 좋습니다 (데이터가 신뢰할 수없는 경우) 실행될 때마다 코드를 분석해야하므로 속도가 느립니다.

더 좋은 방법은이 같은 switch을 사용하는 것입니다 :

function calculate(a, operator, b) { 
    switch (operator) { 
     case "+": 
     return a + b; 
     case "-": 
     return a - b; 
     case "*": 
     return a * b; 
     case "/": 
     return a/b; 
    } 
} 
var answer = calculate(right_digit, sign[0], left_digit); 
+0

@AlienWebguy * 가능성 * 중 하나인데 권장하지 않습니다. – Lekensteyn

+0

내 의견을 말할 때 공평하게 말하면, 'eval()'이 당신의 대답의 전부입니다;) – AlienWebguy

0

당신은 평가를 사용 할 수 있습니다

var answer = eval(left_digit + sign[0] + right_digit); 
3

나는 이것을 할 수 없다고 확신하지만, 그렇게하는 기능을 만들 수있다.

function action(a, b, c) { 
    switch (c) { 
     case "+": 
      return a+b; 
     case "-": 
      return a-b; 
     case "*": 
      return a*b; 
     default: 
      return a/b; 
    } 
} 
0

안전한 eval 솔루션 (숫자를 필터링하고 서명하고, 그 형식이 아닌 경우 오류가 발생합니다) :

function calculate(expr) { 
    var matches = /^(\d+)([+\-*/])(\d+)$/.exec(expr); 

    if(!matches) { 
     throw "Not valid"; 
    } 

    return eval(matches[1] + matches[2] + matches[3]); 
} 

calculate('2*4'); // 8 

그래서 당신이 할 수 있습니다

calculate(left + sign + right);