javascript - 用不重复的随机数填充数组

标签 javascript arrays

所以我有一个名为 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/

相关文章:

c - 使用 strtok 将事物放入单独的数组中

javascript - 滑动 div 从左到右,从右到左,然后使用 jquery 居中

javascript - TypeScript 中 c# 类虚拟成员的等价物

C: 将 strtok token 分配给 char * 段错误

javascript - 在 JavaScript 中测试/检查字符串的最佳实践

php - 从数组中获取 3 个最低值,PHP

php - 从Facebook组获取YouTube嵌入

javascript - 在 React 中将变量设置为子节点

javascript - 使用 html2canvas 隐藏 div 的屏幕截图

ios - 如何阻止 Swift 在我的 [String] 中注入(inject)转义单引号?