[JavaScript]JavaScript(js)中数组随机排序的实现方法有哪些呢?

Javascript 作者: Rector 7 次阅读 · 读完约需 1 分钟 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

问题描述

JavaScript中,如何对数组arr1进行随机排序呢?

var arr1 = ["a", "b", "c", "d"];

方案一

使用Shuffle排序算法,实现算法代码如下:

function shuffle(array) {
  var currentIndex = array.length, temporaryValue, randomIndex;

  while (0 !== currentIndex) {

    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;

    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;
  }

  return array;
}

调用示例:

var arr = [2, 11, 37, 42];
arr = shuffle(arr);
console.log(arr);

ES6的语法可重构为如下的代码:

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递归方式实现如下:

const getShuffledArr = arr => {
    if (arr.length === 1) {return arr};
    const rand = Math.floor(Math.random() * arr.length);
    return [arr[rand], ...getShuffledArr(arr.filter((_, i) => i != rand))];
};

方案三

使用ES6和array.map方式实现如下:

function getShuffledArr (arr){
    return [...arr].map( (_, i, arrCopy) => {
        var rand = i + ( Math.floor( Math.random() * (arrCopy.length - i) ) );
        [arrCopy[rand], arrCopy[i]] = [arrCopy[i], arrCopy[rand]]
        return arrCopy[i]
    })
}

方案四

使用ES6和array.reduce方式实现如下:

function getShuffledArr (arr){
    return arr.reduce( 
        (newArr, _, i) => {
            var rand = i + ( Math.floor( Math.random() * (newArr.length - i) ) );
            [newArr[rand], newArr[i]] = [newArr[i], newArr[rand]]
            return newArr
        }, [...arr]
    )
}

阅读了该文章的人还浏览了...

本文永久链接码友网 » [JavaScript]JavaScript(js)中数组随机排序的实现方法有哪些呢?

发布于: 2019-09-12 14:56:16
分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册