我想为0到256 ^ 3之间的整数生成一个随机顺序(以便随机获取所有颜色),所以我现在正在使用这种方式:
var c = [],
j = 0;
//enum
for (;j<16777216;j++) c[j] = j;
//calculate random elements faster
for(;c.length;c.splice(j,1)) {
j = Math.floor(Math.random() * c.length);
//every j is a random number between 0 and 256^3
}
生成所有数字需要很长时间......你知道一种更好的时间性能来解决这个问题吗?
答案 0 :(得分:1)
您现在使用的代码存在一些问题。
它没有重新排序数组中的值,而是根据数组大小的变化生成随机值。这并不能保证生成的序列中不会有重复的值。 (事实上,除了最小的数组大小之外,你肯定会有重复数据。)
这不是随机的。随着数组大小的缩小,序列末尾生成的值也会缩小。 (在第0次迭代之后,不能再生成值16777216
。每次迭代都会消除一个新值。)
正如您已经指出的那样,它很慢。你花了很多时间从splice
函数返回新的数组值,你只需要在每次迭代时抛弃它。您最好使用How to randomize (shuffle) a javascript array?
c
中的值进行随机播放
醇>