Массив из элементов другого массива, взятых в случайном порядке
Здравствуйте, нужно создать массив, состояший из элементов другого массива, при этом
1)элементы не должны повторяться, 2)их количество должно быть равно количетству элементов в исх. массиве, 3)они д.б. расположены в случайном порядке Отмечу, что мне нужны не сами элементы исходного массива в конечном массиве, а их порядковые номера, и чтобы именно они были случайны и не повторялись. Как я делаю: this.list = [];//Исходный массив, там у меня хранятся значения x1,x2,x3,x4 this.temp=[];//Конечный массив for (var i = 1; i <= this.list.length; i++) { var rand = Math.floor(Math.random()*this.list.length); var rrand = this.list.indexOf(this.list[rand]); this.temp.push(rrand); this.temp.sort(); } //Проверка на повторения в конечном массиве for (var i = this.temp.length; i > 0; i--) { if (this.temp[i] === this.temp[i-1]) { this.temp.splice(i, 1); } } В общем говоря, в конечном массиве у меня нет такого же количества элементов, что и в исходном. Пожалуйста помогите решить эту проблему. |
Basil_JS,
пока ничего не понял -- наверно день такой ))) - или вам надо просто перемешать исходный массив |
мне нужно перемешать порядковые элементы исх массива, то есть было в массиве 40 элементов. на выходе нужно получить что-то вроде: [10, 28, 1, 7, ...].
|
Basil_JS,
снова да ладом -- либо перемешать исходный либо исходный совсем ненужен и нужно создать массив такой-то длины |
|
у исходного массива берем лишь длину
|
Basil_JS, или random(0,39,40)
<script language="JavaScript" type="text/javascript"> function random(min,max,l) {var arr = [],m = [],n = 0; if (max - min < l-1) return; for (var i=0; i<=(max-min); i++)m[i] = i + min; for (var i=0; i<l; i++) {n = Math.floor(Math.random()*(m.length)); arr[i]=m.splice(n,1)[0];}; return arr } document.write(JSON.stringify(random(1,40,40))) </script> |
Часовой пояс GMT +3, время: 05:07. |