1. // 使用函数打包一个数组,该数组包含范围内的所有不重复的数字
    2. // 传入一个值时,该值小于零时,范围为该值到1,大于零则为1到该值。
    3. // 传入两个值时,范围为小值到大值
    4. function nonRerandom (...num) {
    5. // 定义最小值,最大值 和用来包含随机数的数组
    6. let minNum, maxNum
    7. const randomArr = []
    8. // 判断最小值和最大值的具体顺序
    9. if (num.length === 2) {
    10. if (num[0] === num[1]) {
    11. return num[0]
    12. }
    13. // 通过解构赋值 可以快速完成变量赋值,
    14. [minNum, maxNum] = num[0] < num[1] ? [num[0], num[1]] : [num[1], num[0]]
    15. } else {
    16. if (num[0] === 1) {
    17. return 1
    18. }
    19. [minNum, maxNum] = num[0] < 1 ? [num[0], 1] : [1, num[0]]
    20. }
    21. // 将最小值到最大值之间的全部整数循环写入数组中
    22. for (let i = parseInt(minNum); i <= parseInt(maxNum); i++) {
    23. randomArr.push(i)
    24. }
    25. // 将数组随机乱序 乱序后的数组 按顺序取出 即为非重随机数
    26. let index = randomArr.length
    27. // 取出数组中的最后一位数,并将之前的全部数字随机取出一位 交换,然后向前循环。循环结束后得到的数组即为乱序数组
    28. while (index) {
    29. const r = Math.floor(Math.random() * index--);
    30. [randomArr[r], randomArr[index]] = [randomArr[index], randomArr[r]]
    31. }
    32. return randomArr
    33. }
    34. nonRerandom(32)

    具体表现可点击查看

    小小优化了下

    1. function nonrandom (...num) {
    2. if (Array.isArray(num[0])) { num = num[0] } // 判断得到的第一个参数是不是数组,如果是数组则将数组导出
    3. let maxNum = parseInt(num[0]) || 10,
    4. minNum = parseInt(num[1]) || 1; // 赋给边界的两个数字以默认的最大值和最小值
    5. if (minNum === maxNum) { return maxNum } // 如果两值相等则返回
    6. minNum > maxNum ? [minNum, maxNum] = [maxNum, minNum] : ''
    7. let randomArr = [...Array(maxNum - minNum + 1).keys()].map(item => item + minNum )
    8. let index = randomArr.length
    9. while (index) {
    10. const r = Math.floor(Math.random() * index--);
    11. [randomArr[r], randomArr[index]] = [randomArr[index], randomArr[r]]
    12. }
    13. return randomArr
    14. }
    15. console.log(nonrandom()) // [9, 7, 8, 4, 6, 1, 5, 2, 10, 3]
    16. console.log(nonrandom(20)) // [1, 7, 16, 15, 17, 3, 8, 9, 19, 10, 2, 18, 12, 6, 13, 20, 11, 14, 4, 5]
    17. console.log(nonrandom(2, 20)) // [15, 2, 4, 7, 8, 10, 18, 16, 13, 12, 6, 5, 20, 19, 14, 17, 9, 3, 11]
    18. console.log(nonrandom(['2', '20'])) // [17, 2, 14, 3, 16, 20, 11, 5, 19, 6, 7, 9, 12, 13, 4, 10, 18, 15, 8]