方法一:最精简代码的打乱方法
// An highlighted block
var arr = [4,1,67,12,45,121,3];
arr.sort(function() {
return (0.5-Math.random());
});
console.log(arr);
这里介绍下sort()函数,在JS中Array对象里内置了一个函数:
arrayobj.sort([sortfunction])
此方法将 Array 对象进行适当的排序;在执行过程中并不会创建新的 Array 对象。
sortFunction为可选项。
是用来确定元素顺序的函数的名称。如果这个参数被省略,那么元素将按照 ASCII 字符顺序进行升序排列。
sortFunction方法有两个参数。分别代表每次排序比较时的两个数组项。sort()排序时每次比较两个数组项都回执行这个参数,并把两个比较的数组项作为参数传递给这个函数。当函数返回值为1的时候就交换两个数组项的顺序,否则就不交换。
方法二:这个方法打得比较乱
var Arr = [4,1,67,12,45,121,3];
function randArr(arr) {
for (var i = 0; i < arr.length; i++) {
var iRand = parseInt(arr.length * Math.random());
var temp = arr[i];
arr[i] = arr[iRand];
arr[iRand] = temp;
}
return arr;
}
//测试:
console.log(randArr(Arr));
随机播放列表案例
首先要明确,我们对播放列表打乱的前提是不能对原数组进行更改的。
//获取min和max之间的一个随机整数[5,100];
function getRandomInt(min,max){
return Math.floor(Math.random()*(max-min+1))+min;
}
//打乱数组
function shuffle(arr){
let _arr = arr.slice(); //slice不会影响原来的数组,但是splice就会影响原来的arr数组
for (let i = 0; i<_arr.length; i++;){
let j = getRandomInt(0,i);
let t = _arr[i];
_arr[i] = _arr[j];
_arr[j] = t;
}
return _arr;
}