写个方法获取数组任意个不重复的随机数组元素

在前端开发中,你可以使用JavaScript的Array方法和Math.random()函数来获取数组中任意个不重复的随机元素。以下是一个示例函数,它接受两个参数:源数组和要获取的元素数量。

function getRandomUniqueElements(array, numberOfElements) {
    if (numberOfElements > array.length) {
        throw new Error('Requested number of elements exceeds array length');
    }

    // 复制源数组以避免修改原始数组
    let shuffledArray = array.slice();

    // 使用Fisher-Yates洗牌算法打乱数组
    for (let i = shuffledArray.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [shuffledArray[i], shuffledArray[j]] = [shuffledArray[j], shuffledArray[i]];
    }

    // 返回前numberOfElements个元素
    return shuffledArray.slice(0, numberOfElements);
}

// 示例用法
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const numberOfElements = 4;
const randomElements = getRandomUniqueElements(array, numberOfElements);
console.log(randomElements); // 输出可能是 [3, 7, 2, 9] 或其他任意4个不重复元素的数组

这个函数首先检查请求的元素数量是否超过了源数组的长度。然后,它使用Fisher-Yates洗牌算法(也称为Knuth洗牌算法)来打乱数组。最后,它返回打乱后的数组中的前numberOfElements个元素。

注意,这个函数会修改传入的数组的副本,而不会修改原始数组本身。如果你不介意修改原始数组,可以省略slice()调用并直接在原始数组上操作。但是,在大多数情况下,保留原始数组不变是一个更好的做法。

posted @ 2024-12-25 06:20  王铁柱6  阅读(6)  评论(0编辑  收藏  举报