JS:数组中随机取出几个元素

3,065 阅读1分钟

最近写小程序项目时候,需要写一个今日推荐模块:从一系列推荐的列表中,随机抽取3条作为今日推荐。

下面展示用纯前端处理:

从数组 arr 中,随机取出几个数,组成新的数组 newArr

  /**
  * @params arr 传入的源数组
  * @params length 需要获取的元素的个数
  */
  function myRandom(arr, length){
    var newArr = []; // 组成的新数组初始化
    for(var i = 0; i < length; i++){
      var index = Math.floor(Math.random()*arr.length);
      var item =  arr[index];
      newArr.push(item)
      arr.splice(index, 1)
    }
    return newArr.reverse()
  }
  
  myRandom([1,2,3,4,5,6], 3)

解析:

  • var newArr = []; 声明并定义了一个新的数组,用来存放最后结果的值;
  • for循环里面,循环的次数,表示从数组中取值的个数;比如要从数组中取3个,则循环3次.
  • var index = Math.floor(Math.random()*arr.length);每次执行for循环后,获取的随机索引
  • var item = arr[index];获取的随机数组项
  • newArr.push(item),将获取的随机项,追加到之前定义的新数组中;
  • arr.splice(index, 1),注意:每次追加完之后,需要将此值从源数组中排除 (防止后面随机获取的时候,获取到重复的值)
  • 循环上面的操作。(注意:每一次循环之后,数组的长度都减1)
  • 最后返回新数组的值;