评估数学运算符从字符串到随机数一起使用

时间:2018-10-31 11:09:27

标签: javascript arrays string eval

我有一个数学测验,数字是随机的,运算符也是随机的,但是要使运算符随机化,我必须将它们放在字符串中并使用Math.random,但是在尝试计算问题时所有方法都可以使用不确定如何评估数学运算符。

var operationArray = ['x','&#247','+','-'];
var randomOperation1 = Math.floor(Math.random()*operationArray.length);
var randomOperation2 = Math.floor(Math.random()*operationArray.length);


  var randomNumber1 = Math.floor(Math.random() * 6) + 5;
  var randomNumber2 = Math.floor(Math.random() * 8) + 10;
  var randomNumber3 = Math.floor(Math.random() * 40 + 1);
  _questionText = document.getElementById("question").innerHTML = randomNumber1 + " " + operationArray[randomOperation1] + " " + randomNumber2 + " " + operationArray[randomOperation2] + " " + randomNumber3;

_decimalAnswer = randomNumber1 + randomNumber2 + randomNumber3;
  _answer = Math.round(_decimalAnswer);

研究之后,我遇到了eval(),但看不到当数字具有随机值且运算符为字符串时如何工作。

2 个答案:

答案 0 :(得分:1)

尽管我根本不建议使用eval(evil)。在这种情况下,这可能是必需的。

var operationArray = ['x','&#247','+','-'];
var randomOperation1 = Math.floor(Math.random()*operationArray.length);
var randomOperation2 = Math.floor(Math.random()*operationArray.length);

var randomNumber1 = Math.floor(Math.random() * 6) + 5;
var randomNumber2 = Math.floor(Math.random() * 8) + 10;
var randomNumber3 = Math.floor(Math.random() * 40 + 1);
_questionText = document.getElementById("question").innerHTML = randomNumber1 + " " + operationArray[randomOperation1] + " " + randomNumber2 + " " + operationArray[randomOperation2] + " " + randomNumber3;

将操作符替换为代码使用的实际操作符

_questionText = _questionText.replace(/&#247/g, '/').replace(/x/g, '*');

计算字符串。

_decimalAnswer = eval(_questionText);
_answer = Math.round(_decimalAnswer);

答案 1 :(得分:-1)

如果我理解您的说法正确,那么通常您希望达到以下目标:

var data = [1, "+", 2];
var result = yourFunction(data);
console.log(result);//3

要执行此操作,您需要编写解析器,该解析器将与您的数组一起使用并执行操作。像这样:

var result = 0;
for(var i = 0; i < data.length; i++) {
  switch(data[i]){
    case '+':
      result += data[i + 1];
      i++;
      break;
    default:
      result = data[i];
  }
}

如果您需要更复杂的解决方案,请参见this shitcode