Всем привет. Необходимо вывести на страницу n-ое кол-во элементов (с числами) в случайном порядке. Ну или n-ое кол-во элементов в обычном порядке, но со случайными числами. Числа не должны повторяться. Может я не так начал, но я использую Math.rand();
Есть несколько кнопок с числами, которые определяют, сколько элементов будет создано на странице. А так же эти числа определяют нумерацию этих элементов. Всё получилось, и создание и нумерация, но только не получилось сделать рандомные неповторяющиеся числа на этих элементах.
в общем, нужно получить что-то такое, если на 8 чисел :
4 7 1
5 2 9
8 6
9 2 3
6 5 1
4 8
ссылка на
jsfiddle<div class="buttons">
<div class="btn" data-amont="3">3</div>
<div class="btn" data-amont="8">8</div>
<div class="btn" data-amont="15">15</div>
<div class="btn" data-amont="24">24</div>
</div>
// Получить выбранное кол-во блоков
$('.btn').on('click', function() {
var x = $(this).text();
setBlocks(x);
});
// Установить кол-во блоков
function setBlocks(x) {
for (var i = 1; i <= x; i++) {
var res = getRandom(1, x);
var block = '<div class="box" data-num="'+ res +'">'+ res +'</div>';
wrap.append(block);
}
}
// Получить рандомное число
function getRandom(min, max) {
var arr = [];
for (var i = 0; i < max; i++) {
x = Math.floor(Math.random() * (max - min + 1)) + min;
if (arr.indexOf(x)) {
return;
// или return Math.floor(Math.random() * (max - min + 1)) + min;
}
else {
arr.push(x);
}
return arr;
}
}
Вот здесь не пойму, как делать проверку на наличие числа в массиве. В воображении всё просто : перебираю элементы в цикле (цикл = длина переменной max), и каждую итерацию цикла запускаю функцию, которая возвращает рандомное число. Потом это число записываю в массив. Если такое число уже есть, то снова запускаю рандомное число или return.
Пол дня уже сижу, ломаю голову.
Пробовал по-разному. Я вот пока не знаю, как лучше - создавать элементы в обычном порядке и им присваивать рандомные числа, или наоборот, просто перемешивать эти элементы.
Спасибо