Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Массив из элементов другого массива, взятых в случайном порядке (https://javascript.ru/forum/misc/55055-massiv-iz-ehlementov-drugogo-massiva-vzyatykh-v-sluchajjnom-poryadke.html)

Basil_JS 12.04.2015 12:20

Массив из элементов другого массива, взятых в случайном порядке
 
Здравствуйте, нужно создать массив, состояший из элементов другого массива, при этом
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);
}
}
В общем говоря, в конечном массиве у меня нет такого же количества элементов, что и в исходном.
Пожалуйста помогите решить эту проблему.

рони 12.04.2015 12:36

Basil_JS,
пока ничего не понял -- наверно день такой ))) - или вам надо просто перемешать исходный массив

Basil_JS 12.04.2015 12:41

мне нужно перемешать порядковые элементы исх массива, то есть было в массиве 40 элементов. на выходе нужно получить что-то вроде: [10, 28, 1, 7, ...].

рони 12.04.2015 12:56

Basil_JS,
снова да ладом -- либо перемешать исходный либо исходный совсем ненужен и нужно создать массив такой-то длины

рони 12.04.2015 12:59

Basil_JS,
http://javascript.ru/forum/misc/9636...html#post56975

Basil_JS 12.04.2015 13:00

у исходного массива берем лишь длину

рони 12.04.2015 13:07

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, время: 20:52.