Выбрать значение из массива на основе предыдущего значения - PullRequest
0 голосов
/ 12 июля 2020

У меня есть массив с размерами строк, которые мне нужны, и я выбираю их случайным образом, например

const Numbers = ["8", "4", "6", "2"];
const randomNumber = Numbers[Math.floor(Math.random() * Numbers.length)];
console.log(randomNumber)

это даст мне случайное значение из массива

Теперь я хочу выбрать 3 числа, сумма которых равна 12, а затем сбросить и начать заново.

Пример:

Случайный массив, выбранный номер 8, после этого номер должен быть 4 ИЛИ номер 2 дважды, затем начать все сначала

выбрал номер 4, поэтому доступные числа должны быть 4 дважды ИЛИ 2 четыре раза ИЛИ 4 один раз и 2 дважды ... и т. Д. c и так далее

, поэтому сумма должна быть 12, а затем снова сбросить

конечно все это будет внутри l oop, но то, что я хочу знать, это лучший способ сделать это.

==== Update ====

это HTML используется

randomRow должно иметь значение, каждые 3 строки должно быть 12

for (let i = 0; i < results.length; i++) {

    document.getElementById("someID").innerHTML += `

                <div class="col-`+randomRow+`">
<p>Hello</p>
                </div>`

}

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Каждый раз, когда вы выбираете случайное число

  1. , вы должны отфильтровать числа, которые не будут составлять 12.
  2. Вычтите выбранное число из суммы, и повторите шаг 1, пока сумма не достигнет 0

Изменить: обновлено в соответствии с вопросом, предполагая, что вы используете Bootstrap

document.getElementById("start").addEventListener("click", _ => {
  let sum = +document.getElementById("sum").value;
  let numbers = document.getElementById("numbers").value.split(',').map(x=>+x);
  let picked = [];
  
  while(sum > 0) {
    // filter available `numbers` based on the `sum`
    numbers = numbers.filter(x => x <= sum);
    
    let n = numbers[Math.floor(Math.random() * numbers.length)];
    picked.push(n);

    // subtract `n` from `sum`
    sum -= n;
  }
  
  document.getElementById("row").innerHTML = picked.map(n => `<div class="border border-dark p-3 col-${n}">col-${n}</div>`).join("");
  
});
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" rel="stylesheet"/>
Sum: <input type="text" id="sum" value="12" /> 
Numbers: <input type="text" id="numbers" value="8,6,2,4" /> <br/>
<button type="button" id="start">Start</button>

<div class="container-fluid">
  <div class="row" id="row">
    
  </div>
</div>
1 голос
/ 12 июля 2020

Рассмотрим небольшую игру ниже, в ней используется ваш случай, она вычисляет общую сумму вашего randomNumber из исходного массива.

Он проверяет, равна ли сумма> = 12, и останавливает игру!

Это помогает?

const Numbers = [8, 4, 6, 2];
var randomNumber = 0;
var sum = 0;

function calcSum() {

  randomNumber = Numbers[Math.floor(Math.random() * Numbers.length)];
  sum = sum + randomNumber;
  if (sum >= 12) {
    document.getElementById('calculatedTotal').innerHTML = "Your score exceeded 12, click 'start game' to play again!";
    sum = 0;
    randomNumber = 0;
  }
  else {
    document.getElementById('calculatedTotal').innerHTML = sum;

  }
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button id="btn" onclick="calcSum()">Start game!!</button>
    <h2>Your Score: </h2>
    <h3 id="calculatedTotal"></h3>
    <script src="test.js"></script>
</body>
</html>
...