Получайте различное случайное значение каждый раз

-6

Я что-то застрял. Я хочу, чтобы пользователь мог выбрать значение из массива. Но проблема в том, что он/она не может получить то же значение, что и предыдущее.

https://jsbin.com/hibihubega/edit?html,js,console,output

Я не знаю, как действовать, помогать.

function getNum(){
var num = ['1', '2', '3', '4', '5'];

var selected = num[Math.floor(Math.random() * num.length)];
var history = selected;

if(history){

}

}

$('button').click(function(){
console.log(getNum());
})

спросил(а) 2021-01-25T18:40:56+03:00 4 месяца, 4 недели назад
1
Решение
63

Попробуй это :

$(document).ready(function() {

num = ['1', '2', '3', '4', '5'];
temp =[];

$("button").on("click",function(){

getNum();

})

function getNum(){

if ( num.length <= 0 ) {
num = temp;
temp =[];
}

var indexRandom = Math.floor(Math.random()*(num.length));
console.log(num[indexRandom]);
temp.push(num[indexRandom]);
num.splice(indexRandom,1);
}

})

Итоговый код:

<!DOCTYPE html>
<html>
<head>
<style>
</style>
</head>
<body>
<button>dfdgdfg</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>

$(document).ready(function() {

num = ['1', '2', '3', '4', '5'];
temp =[];

$("button").on("click",function(){

getNum();

})

function getNum(){

if ( num.length <= 0 ) {

num = temp;
temp =[];

}

var indexRandom = Math.floor(Math.random()*(num.length));
console.log(num[indexRandom]);
temp.push(num[indexRandom]);
num.splice(indexRandom,1);
}

})


</script>
</body>
</html>

ответил(а) 2021-01-25T18:40:56+03:00 4 месяца, 4 недели назад
44

Удалите значение после выбора и замените его до следующего выбора.

Вот как вы могли форматировать свой код:

var num,
lastNum,
numbers = [1,2,3,4,5];

function newNum(){
lastNum && numbers.push(lastNum);
lastNum = num;
var r = Math.floor(Math.random() * numbers.length);
num = numbers[r];
numbers.splice(r,1);
}

$("button").click(function(){
newNum();
console.log(num);
})

Выбранное число является случайным, но никогда не выбранным последним.

ответил(а) 2021-01-25T18:40:56+03:00 4 месяца, 4 недели назад
45

Просто удалите значение с помощью splice() после его использования.

function getNum() {
if (num.length==0){
return false;
} else {
var index = Math.floor(Math.random() * num.length)
var selected = num[index];
num.splice(index, 1); //remove from array
return selected;
}
}

И если вы хотите сохранить исходный, создайте другой (клон) исходного массива и уменьшите это.

ответил(а) 2021-01-25T18:40:56+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема