IT序号网

数组乱序排列知识解答

lxf 2021年05月25日 编程语言 154 0

1、利用Math.random*arr.length随机下标,然后删除取到的元素,继续随机下标。

//将数组乱序输出 
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
var newArr = []; 
for (var i = 0; i < arr.length; i++) { 
    var index = Math.floor(Math.random() * arr.length); //随机下标 
    newArr.push(arr[index]); //将随机出的元素,存放新数组newArr中去 
    arr.splice(index, 1); //    将随机出的元素在arr中删除             
} 
//arr中删除随机出的元素,arr.length-1,同时i++,导致循环不会10次,会是5次.最后得到newArr中只有一半的随机数字,arr中剩下另一半. 将其合并到一起,得到res 
var res = [...newArr, ...arr]; 
console.log(res)

2、法一的修正版

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
var newArr = []; 
var len = arr.length; 
for (var i = 0; i < len; i++) { 
    var index = Math.floor(Math.random() * arr.length); //随机下标 
    newArr.push(arr[index]); //将随机出的元素,存放新数组newArr中去 
    arr.splice(index, 1); //    将随机出的元素在arr中删除             
}
var res = [...newArr, ...arr]; console.log(res)

3、数组排序

function randomSort(arr) { 
    return arr.sort((a, b) => { 
        return Math.random() > 0.5 ? 1 : -1; 
    }) 
}

4、洗牌原理:从数组的最后位置开始,然后从前面随机一个位置,对这两个数进行交换!直到循环完毕

function shuffleSort(arr) { 
    let len = arr.length; 
    let i = len - 1; 
    while (i >= 0) { 
        let index = Math.floor(Math.random() * i); 
        let temp = arr[i]; 
        arr[i] = arr[index]; 
        arr[index] = temp; 
        i--; 
    } 
    return arr; 
}

发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

kendo-ui表单验证知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。