一入前端坑似海Web前端之路让前端飞

JavaScript-如何实现数组的随机排序?

2017-02-27  本文已影响68人  YukiYang

第一种方法。

Math.random()返回介于 0(包含) ~ 1(不包含) 之间的一个随机数。

这种方法是循环过程中通过Math.random()函数产生的随机值,在数组中这个随机值位置的数和arr[i]位置的数据交换,循环结束,产生随机数组。

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

function randSort1(arr) {
    for(var i = 0, len = arr.length; i < len; i++) {
        var rand = parseInt(Math.random() * len);
        var temp = arr[rand];
        arr[rand] = arr[i];
        arr[i] = temp;
    }
    return arr;
}

console.log(randSort1(arr));
第一种方法结果

第二种方法。

splice() 方法用于插入、删除或替换数组的元素。
注意:这种方法会改变原始数组!。

第二种办法,建立一个新的空数组,并通过Math.random()随机得到小于数组长度的randomIndex,把原数组中的arr[randomIndex]有序的放到新数组中。同时通过arr.splice(randomIndex, 1)把刚放到新数组中的数据删除。以此类推,直至arr中没有数据产生新的随机数组。

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

function randSort2(arr) {
    var mixedArray = [];
    while(arr.length > 0) {
        var randomIndex = parseInt(Math.random() * arr.length);
        mixedArray.push(arr[randomIndex]);
        arr.splice(randomIndex, 1);
    }
    return mixedArray;
}

console.log(randSort2(arr));
第二种方法结果

第三种方法。

sort() 方法用于对数组的元素进行排序。排序顺序可以是字母或数字,并按升序或降序。当不带参数的时候默认排序顺序为按字母升序。

可以看出Math.random()得到的是0~1之间的随机数。众所周知,sort()可以调用一个函数做为参数,如果这个函数返回的值为-1表示数组中的a项排在b项前。如此一来,可以写一个随机函数,让Math.random()随机出来的数与0.5做为一个比较,如果大于.5就返回 -1(a排在b前面),反之返回1(b排在a前面)。


var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
arr.sort(function() {
    return Math.random() - 0.5;
})
console.log(arr);
第三种方法结果

文章仅为个人学习观点,如有错误,还请各位朋友指导,我将不胜感激。
与此同时写文章时参考了一些博文资料,如有侵权请立即与我联系解决,并表示非常抱歉!

谢谢你长的那么美,并看了我的文章~

上一篇下一篇

猜你喜欢

热点阅读