2016-06-08 170 views
0

我正在從數組A和B中獲取隨機值,並試圖比較它們的求值,不工作,因爲數組中的值是字符串,如何讓它們得到數字並解決它們?比較數組中的值

.controller('questions', function($scope) { 
    var A = ['6-2', '7+3', '8*1', '9/3', '8+1']; 
    var B = ['1+5', '7-3', '10-5', '10/2', '3*2']; 

    var questionA = A[Math.floor(Math.random() * A.length)]; 
    var questionB = B[Math.floor(Math.random() * B.length)]; 

    if (questionA > questionB) { 

    console.log('It\'s bigger '); 
    } else { 

    console.log('It\'s smaller'); 
    } 
}); 
+0

你是什麼意思?你想讓'7 + 3'神奇地變成'10'嗎? – putvande

回答

3

您可以使用$scope.$eval()得到方程的結果:

var answerA = $scope.$eval(questionA), 
    answerB = $scope.$eval(questionB); 

if(answerA > answerB) 
+0

thx,那是它 – Mark

+0

@Rajesh你看過我的回答了嗎?它使用'$ scope。$ eval' not js'eval' –

+0

@MartijnWelker我的歉意。 – Rajesh

0

提供替換eval

JSFiddle

var A = ['6-2', '7+3', '8*1', '9/3', '8+1']; 
 
var B = ['1+5', '7-3', '10-5', '10/2', '3*2']; 
 

 
var len = Math.max(A.length, B.length); 
 

 
for (var i = 0; i < len; i++) { 
 
    var r1 = evaluate(A[i]); 
 
    var r2 = evaluate(B[i]); 
 

 
    var msg = "It's " + (+r1 > +r2 ? "Bigger" : "Smaller"); 
 
    console.log(msg, r1, r2); 
 
} 
 

 
function evaluate(str) { 
 
    var opReg = /[-+\/\*]/g; 
 
    var op_arr = str.match(opReg); 
 
    var result = 0; 
 
    var sortOrder = { 
 
    "*": 1, 
 
    "/": 2, 
 
    "+": 3, 
 
    "-": 4 
 
    } 
 
    op_arr.sort(function(a, b) { 
 
    var s1 = sortOrder[a]; 
 
    var s2 = sortOrder[b]; 
 
    return s1 > s2 ? 1 : s1 < s2 ? -1 : 0; 
 
    }).forEach(function(op) { 
 
    var val_arr = getValueArr(str, op) 
 
    result = calculate(val_arr, op); 
 
    str = str.replace(val_arr[0] + op + val_arr[1], result) 
 
    }); 
 
    return result; 
 
} 
 

 
function getValueArr(str, op) { 
 
    var r = str.split(op); 
 
    var v1 = 0; 
 
    var v2 = 0; 
 
    var opReg = /[-+\/\*]/g; 
 
    v1 = opReg.test(r[0]) ? r[0].split(opReg).reverse()[0] : r[0]; 
 
    v2 = opReg.test(r[1]) ? r[1].split(opReg)[0] : r[1]; 
 
    return [v1, v2]; 
 
} 
 

 
function calculate(val, op) { 
 
    switch (op) { 
 
    case "-": 
 
     return +val[0] - +val[1]; 
 
    case "+": 
 
     return +val[0] + +val[1]; 
 
    case "*": 
 
     return +val[0] * +val[1]; 
 
    case "/": 
 
     return +val[0]/+val[1]; 
 
    } 
 
    return 0; 
 
} 
 
evaluate('6-2+4*2')