У меня есть математическая викторина, где числа рандомизированы, как и операторы, но чтобы сделать операторы случайными, мне пришлось поместить их в строку и использовать Math.random, который все работает, однако при попытке вычислить вопросы я не уверен, как оценить математические операторы.
var operationArray = ['x','÷','+','-'];
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 (), но не смог понять, как это будет работать, когда числа имеют случайные значения, а операторы являются строками.
Хотя я бы вообще не рекомендовал использовать eval (зло). В этом случае это может быть необходимо.
var operationArray = ['x','÷','+','-'];
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(/÷/g, '/').replace(/x/g, '*');
Оцените строку.
_decimalAnswer = eval(_questionText);
_answer = Math.round(_decimalAnswer);
Что не работает? Я протестировал код в консоли Chrome, и у меня он сработал.
В моем коде была ошибка, ничего общего с тем, чем вы поделились. Ваш подход отлично работает, спасибо.
Если я правильно вас понял, обычно вы хотите добиться этого:
var data = [1, "+", 2];
var result = yourFunction(data);
console.info(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];
}
}
Если вам нужно более сложное решение, см. этот дерьмовый код
Хорошая идея, и я не понимаю, почему это не сработает, но это не так. Я опубликую обновление, как только выясню почему. Спасибо.