JavaScript 实现从数组中随机获取指定数量不重复元素

作者:异步漫步时间:2026-10-24 17:09:50浏览:461

本文介绍一种使用 JavaScript 从给定数组中随机选取指定数量不重复元素的方法。核心思路是创建副本数组,通过 Math.random 生成随机索引,提取元素后利用 splice 从副本中移除该元素,从而确保后续抽取不会重复。若请求数量超过数组长度,算法会自动截断并返回现有最大数量的不重复元素。

JavaScript 随机抽取数组元素算法实现

具体实现代码如下:

<script language="javascript">
// 功能:从指定数组 arr 中随机返回 num 个互不重复的元素
function getArrayItems(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 {
//数组中数据项取完后,退出循环,比如数组本来只有10项,但要求取出20项.
break;
} 
} 
return return_array;
} 
// 以下为测试代码示例
var my_array = new Array();
for (i = 0; i < 20; i++)
{ 
my_array[i] = "Num:"+i;
} 
my_array = getArrayItems(my_array,5);
for (i = 0; i < my_array.length; i++)
{ 
alert(my_array[i]);
} 
</script>
作者最新文章