随机产生0到n之间的k个不相等整数

var fun2 = function(n, k) {

      var returnArr = []

      returnArr[0] = Math.ceil(Math.random() * n)

      var template = 0

      for (let i = 1; i < k; i ++) {

        template = Math.ceil(Math.random() * n)

        for(let j = 0; j < returnArr.length; j ++) {

          if(template === returnArr[j]) {

            i --

            break

          }

          else { returnArr.push(template) }

        }

      }

      return returnArr

    }

    fun2(10,5)

https://img4.mukewang.com/5c6ce6dc000164fe04650215.jpg

为撒呢?


烙印99
浏览 526回答 2
2回答

GCT1015

1, 产生0~n的数组range(n)。2, 产生同长度的随机数。3, 用产生的随机数作为key去排序range(n)4, 取出前k个。其实想从哪个位置取都可以。var arr = new Array()for (var i = 0; i< 10; i++) {&nbsp; &nbsp; arr.push({k:Math.random(),v:i});}var sortbykey = function (a,b) {return a.k-b.k;}arr.sort(sortbykey);for (var i = 0; i< 5; i++) {&nbsp; &nbsp; console.log(arr[i].v);}还是有random.shuffle好

蓝山帝景

都在秀解发,我来说下题主代码为啥会 死循环 + 爆内存因为你在数组for循环里又push东西到数组里了啊,这个动作很危险,弄不好就死循环了。不巧你这个代码就撞上了。。。加断点单步调试一下你就会发现,题主的循环跳不出去啊,因为本来循环要结束了,又push一个元素进去了,好吧,继续循环,又导致 if(template === returnArr[j]) 成立了,结果 i-- 了,又导致外层循环继续。悲剧。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript