javascript数组快速打乱重排的方法


在JavaScript中,快速打乱数组的一个常用方法是使用Fisher-Yates(也称为Knuth)洗牌算法。这个方法通过遍历数组,并与一个随机索引的元素交换位置,来实现数组的随机重排。以下是一个简洁的实现示例:


function shuffleArray(array) {
    for (let i = array.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [array[i], array[j]] = [array[j], array[i]]; // 使用ES6的数组解构进行元素交换
    }
    return array;
}

// 示例
const myArray = [1, 2, 3, 4, 5];
const shuffledArray = shuffleArray(myArray);
console.log(shuffledArray);

这段代码首先定义了一个`shuffleArray`函数,它接受一个数组作为参数。然后,它通过一个向后的for循环遍历数组(从数组的最后一个元素开始,直到第二个元素),在每次迭代中,它都会随机选择一个索引`j`(从`0`到当前索引`i`),并将当前索引`i`的元素与随机索引`j`的元素进行交换。这样,经过遍历后,数组就被随机打乱了。

请注意,这个方法会直接修改传入的数组,并返回修改后的数组。如果你不希望原数组被修改,可以先对原数组进行浅拷贝(例如使用`[...array]`或`array.slice()`),然后再对拷贝后的数组进行打乱。