繁体   English   中英

具有随机唯一 integer 数字的数组(0 到 array.length - 1)

[英]Array with random unique integer numbers (0 to array.length - 1)

这个问题是如何生成所有唯一固定 integer 数字的数组,其中最高等于数组的长度 - 1。

结果数组的示例: [3, 6, 4, 2, 1, 5, 0]

  • 都是独一无二的
  • 随机的
  • 最高数在索引中的最高数 (6)

这个不是: [3, 16, 4, 22, 19039, 555, 0]

首先填充一个顺序数组,然后通过在 compareFunction 中返回随机结果进行排序。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

 let arrLen = 7, resArr = [] for(let i=0; i < arrLen; i++){ resArr.push(i) } resArr.sort((a,b) => { let ranBool = Math.floor(Math.random() * 2) //returns 0 or -1, which either leaves the integers in place or sorts the second one before the first return ranBool - 1 }) console.log(resArr)

  • 在我的解决方案中,我们按 [1, 2, 3] 调用 arrayOfNumbers 的顺序创建一个数字数组
  • 然后我们创建一个空数组调用 randomArray
  • 我们 forEach 循环遍历我们在第一步中创建的数组
  • 我们根据数组的长度生成一个随机数,并在整个 forEach 循环中递减它
  • 然后我们将一个随机数从 arrayOfNumbers 推送到 randomArray
  • 同时(循环)在从 arrayOfNumbers 中推送一个随机数后,我们使用数组方法 splice 将其从 arrayOfNumbers 中删除(所以我们不能再使用它了)
  • 我们将长度缩短一,因此我们只能在 arrayOfNumbers 数组的长度中生成随机数。 所以下次我们调用 arrayOfNumbers[random] 时,我们将从这个数组中得到一个唯一的数字。

 function randomNumbers(howMany) { arrayOfNumbers = []; for (let i = 0; i < howMany; i++) { arrayOfNumbers.push(i); }; const arr = [...arrayOfNumbers]; let length = arr.length const randomArr = []; arr.forEach((num, i) => { const random = Math.floor(Math.random() * length); randomArr.push(arrayOfNumbers[random]); arrayOfNumbers.splice(arrayOfNumbers.indexOf(arrayOfNumbers[random]), 1); length-- }); return randomArr; }; console.log(randomNumbers(101));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM