所以我有一个名为 arr
的数组。
我想用四个随机数填充它:
for (var i = 0; i < 4; i++) {
arr[i] = Math.floor(Math.random() * 10);
}
如果返回一个值为[4, 2, 3, 4]
的数组。如何检查重复项,并重新计算不等于数组中已存在的任何其他值的随机数?
此外,如果有更好的方法来实现这一点,我也很乐意学习/了解这种方式。
最佳答案
Also if there is a better way of accomplishing this, I would love to learn/know that way as well.
有。
如果您需要唯一值,请生成一个常规顺序数组 [1,2,3,4](或您需要的任意长度),然后使用它依次填充第二个数组从第一个数组中提取随机元素(从而增大数组 2,缩小数组 1):
var a1 = [];
for (var i=0; i<4; i++) { a1.push(i); }
var a2 = [];
while (a1.length) {
var pos = Math.random()*a1.length;
var element = a1.splice(pos, 1)[0];
a2.push(element);
}
// a2 is now an array with a random permutation of the elements of a1
splice
调用删除从位置 pos
开始的子数组(在本例中)有 1 个元素,因此 a1
变得越来越短,直到它为空,此时 a2
将成为唯一值的排列数组。
如果我们从 a1 = [0,1,2,3]
开始,那么运行之后 a2
可以是 24 个可能序列中的任何一个,并保证值唯一,因为这就是我们开始的地方,只是按照随机顺序。
关于javascript - 用不重复的随机数填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36962054/