Как превратить строку в массиве в выражение?

#javascript #arrays

#javascript #массивы

Вопрос:

Я нахожусь в процессе создания математической игры и застрял в этой проблеме, когда я не могу преобразовать строку в случайно выбранном массиве (by var randomProblem ) в выражение. Выражения должны оставаться строками, потому что я хочу отобразить полное выражение на экране, чтобы пользователь мог ответить. Я попытался упорядочить выбранный массив var randomProblem , затем убрать кавычки, чтобы превратить его в выражение, но это не сработало.

С моим текущим кодом var randomProblem выбирает случайный массив из var problems . Затем содержимое var randomProblem превращается в строку с помощью JSON.stringify() и сохраняется в вызываемой переменной processProblem . Наконец, я зарегистрировал содержимое var processProblem в консоли и удалил двойные кавычки, чтобы посмотреть, каким будет результат.

например, если randomProblem выбрать ["6-18"] в качестве случайного массива и пройти через JSON.stringify и удалить его кавычки, результат будет [16-8] вместо [8] .

 (function playGame() {

  var problems = [
    ["6 * 6 - 27"],
    ["1 * 10 - 1"],
    ["2   5 * 1"],
    ["5 * 10 - 42"],
    ["8   6 - 7"],
    ["(1 - 1) * 20"],
    ["4 * 3 - 6"],
    ["98 - 95"],
    ["16 - 8"],
    ["(5   9) / 2"],
    ["(21   19) / 5"],
    ["(4 - 3) * 7"],
    ["(7 - 1) / 2"],
    ["(8   2) / 5"]
  ];

  //var problem = document.getElementById('problem');
  var randomProblem = problems[Math.floor(Math.random()*problems.length)];
  //var displayProblem = problem.innerHTML  = randomProblem;
  var processProblem = JSON.stringify(randomProblem);

  console.log(processProblem.replace(/"/g, ""));

})();  

Комментарии:

1. Простое решение: оценка, правильное решение: анализ входных данных.

Ответ №1:

Это работает так, как вы ожидаете:

 (function playGame() {

  var problems = [
    ["6 * 6 - 27"],
    ["1 * 10 - 1"],
    ["2   5 * 1"],
    ["5 * 10 - 42"],
    ["8   6 - 7"],
    ["(1 - 1) * 20"],
    ["4 * 3 - 6"],
    ["98 - 95"],
    ["16 - 8"],
    ["(5   9) / 2"],
    ["(21   19) / 5"],
    ["(4 - 3) * 7"],
    ["(7 - 1) / 2"],
    ["(8   2) / 5"]
  ];

  //var problem = document.getElementById('problem');
  var randomProblem = problems[Math.floor(Math.random()*problems.length)];
  //var displayProblem = problem.innerHTML  = randomProblem;
  var processProblem = JSON.stringify(randomProblem).replace(/"/g, "");

console.log(processProblem);
console.log(eval(processProblem)[0]);

})();
  

Я оцениваю содержимое вашего stringified randomProblem и принимаю его первое значение (с индексом 0), потому что результатом вычисления является массив