simply-web
@simply-web

Как сделать так, чтобы цифры в сгенерированном массиве не повторялись?

У меня есть код :
var allTheTry = 2 ;
	var Array ;
	function num() {
	if (allTheTry > 0 ) {
		Array = [] ;
		for(var j = 0 ; j < 4 ; j++){
		    var rand = Math.floor(Math.random() * 9 ) + 1 ;
		    Array.push(rand);
	    }  
		console.log(Array); // Просто , чтобы видеть массив в консоли
	    allTheTry--;
	}
	 else {
	    	alert('Попытки окончены !');
	    	location.reload();

	    }
}

Тут я даю пользователю две попытки и создаю массив из четырёх случайных чисел ( 1 - 9 ) . Мне надо , чтобы
в сгенирированном массиве цифры не повторялись например : [ 0, 2, 7, 2 ] 2 не должно повторяться .
  • Вопрос задан
  • 1566 просмотров
Решения вопроса 3
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
const Array = [];

while (Array.length < 4) {
    const rand = Math.floor(Math.random() * 9) + 1;
    if (!Array.includes(rand)) {
        Array.push(rand);
    }
}
Ответ написан
0xD34F
@0xD34F Куратор тега JavaScript
Создать массив, содержащий все возможные значения, перемешать его, взять сколько надо элементов из начала:

function randomArr(size, min, max) {
  const arr = Array.from({ length: max - min + 1 }, (n, i) => i + min);

  for (let i = arr.length; --i > 0; ) {
    const j = Math.random() * (i + 1) | 0;
    [ arr[j], arr[i] ] = [ arr[i], arr[j] ];
  }

  return arr.slice(0, size);
}


const arr = randomArr(4, 1, 9);
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
Вынимайте выбранные цифры из корзинки, чтобы следующий выбор не мог остановиться на повторных.

const digits = [1,2,3,4,5,6,7,8,9];
const arr = [];
for (let i=0; i<4; i++) {
  const n = Math.floor(Math.random() * digits.length);
  arr.push( digits.splice(n, 1)[0] );
}
// arr == [2,9,8,1] и каждый раз по-разному )
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vazonov
Javascript developer
Вы можете использовать для этого Set.
MDN Docs

Пример:
const uniqueNumbers = new Set([1, 2, 3, 2]) // будет 1, 2, 3
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы