随机数组元素

时间:2011-05-13 12:28:41

标签: jquery for-loop

我在网上发现这个代码用于改组数组元素,它运行良好,但我无法理解这里的for循环

shuffle = function(o)
{ 
for(var j, x, i = o.length; i; 
    j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
};

感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:3)

这基本上是对for循环的灵活性的误用。

for循环的一般语法是:

for (<init>; <condition>; <increment>) {
  <body>
}

大致可以表示为以下while循环:

<init>;
while(<condition>) {
   <body>
   <increment>
}

由于<body><increment>都被执行,就好像它们位于while的正文中一样,任何可以进入for循环体内的东西,也可以放在<increment>循环的for表达式中。你只需要用逗号分隔语句而不是分号。

因此,您的for循环可能更好地表示为while循环:

var j, x, i = o.length; 
while (i) { // same as while(i != 0)
   j = parseInt(Math.random() * i);
   x = o[--i];
   o[i] = o[j];
   o[j] = x;
}

答案 1 :(得分:2)

j = parseInt(Math.random() * i); // Getting a random number between 0 to n-1, where n is the length of the array.
x = o[--i]; // Getting the last element of the array and storing it in a variable.
o[i] = o[j]; // Storing the randomly selected index value at the last position.
o[j] = x; // Storing the last element's value in random position.

我的值将在每次循环迭代中递减,它将替换最后一个然后倒数第二个,然后依次......并且最终在数组中第一个元素中包含aray中的随机元素。