写一个方法从数组中随机抽取N个不重复的元素

在前端开发中,你可以使用JavaScript的Array原型方法来实现从数组中随机抽取N个不重复的元素。以下是一个示例方法,它使用了Array.prototype.slice来复制原数组,Math.random来生成随机数,以及Array.prototype.splice来从数组中移除已选中的元素:

function getRandomElements(arr, n) {
    if (n > arr.length) {
        throw new Error('Cannot select more elements than the array contains');
    }
    
    // 复制原数组,避免修改原数组
    let clonedArr = arr.slice();
    let result = [];

    for (let i = 0; i < n; i++) {
        // 生成随机索引
        let randomIndex = Math.floor(Math.random() * clonedArr.length);
        // 从clonedArr中取出随机元素,并将其添加到结果数组中
        result.push(clonedArr[randomIndex]);
        // 从clonedArr中移除已被选中的元素,以确保不会重复选择
        clonedArr.splice(randomIndex, 1);
    }

    return result;
}

使用示例:

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let n = 3;
let randomElements = getRandomElements(arr, n);
console.log(randomElements); // 输出可能是 [3, 7, 1],具体结果每次运行都可能不同

这个方法首先检查请求的元素数量n是否超过了原数组的长度。如果是,则抛出一个错误。然后,它复制原数组以避免修改原数组。接下来,它使用一个循环来从复制的数组中随机选择元素,直到达到所需的数量。在每次迭代中,它都会生成一个随机索引,使用该索引从复制的数组中选择一个元素,并将其添加到结果数组中。然后,它从复制的数组中移除已选中的元素,以确保不会重复选择。最后,它返回包含所选元素的结果数组。

posted @   王铁柱6  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示