JavaScript从数组中随机抽取不重复元素的两种实现方式

作者:半夏

时间:2026-10-30

浏览:212

本文介绍在JavaScript中从数组随机抽取不重复元素的两种方法。第一种常规方法在数据量大时可能出现返回函数而非对象的Bug;第二种采用洗牌算法,经测试有效。文章提供了完整示例代码及注意事项,帮助开发者根据场景选择合适方案。

文章目录

常规算法及其局限性

一、常规算法

第一种方法相对常规,但经测试发现存在潜在缺陷。当处理大量数据时,随机抽取几次后返回的结果可能直接变为函数(function)而非预期的对象(object)。不过,对于简单数据类型,通常不会出现此类问题。

示例代码

常规算法代码示例


/**
     从数组中随机抽取数据 2016-09-09
   **/
   function getArrItem(arr, num) {
     var temp_array = new Array();
     for (var index in arr) {
       temp_array.push(arr[index]);
     }
     var return_array = new Array();
     for (var i = 0; i < num; i++) {
       if (temp_array.length > 0) {
         var arrIndex = Math.floor(Math.random() * temp_array.length);
         return_array[i] = temp_array[arrIndex];
         temp_array.splice(arrIndex, 1);
       } else {
         break;
       }
     }
     return return_array;
   }

洗牌算法实现

二、洗牌算法

第二种方法基于洗牌算法(Fisher-Yates Shuffle),经实际测试验证有效。

示例代码

洗牌算法代码示例


/**
      随机化原数组
    **/
    function shuffle(array) {
      var m = array.length,
        t, i;
      // 如果还剩有元素…
      while (m) {
        // 随机选取一个元素…
        i = Math.floor(Math.random() * m--);
        // 与当前元素进行交换
        t = array[m];
        array[m] = array[i];
        array[i] = t;
      }
      return array;
    }
 
//用法
var message = shuffle(totalArr);
message = message.slice(0, 3);

以上总结了两种从JavaScript数组中随机抽取不同元素的方法,希望能为读者的学习或工作提供参考。如有疑问,欢迎留言交流。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章