数组乱序
通过sort方法解决
这里利用sort方法中array.sort(compareFunction),compareFunction这一参数是可选参数。定义替代排序顺序的函数。
这个函数主要通过返回值来进行排序,正数、0、负数会产生不同的排序效果
先来看看代码吧
var arr = [6, 3, 6, 5,0, 7,79, 20, 8];
derangement=arr=>{
arr.sort(()=>{Math.random()-0.5});
console.log(arr)
}
derangement(arr)
常规方法
sort如果不熟练也通过循环的方式来解决
这里采用随机生成一个index值,
并将index对应的原数组中的数值依次添加到乱序后的新数组中去
这里值得注意的一点,Math.random()随机生成的数字中,有很大概率出现重复数字
为了避免乱序后的数组里出现不该出现的问题,这里将随机生成的index存入了一个特定的数组中,用来记录已经添加过的值
并在每次添加新值之前判断是否已经添加过
derangement = arr => {
var newarr = [];//用来存储乱序数组
var indexlist = []//存储原数组中已经放入乱序数组的index
while (newarr.length < arr.length) {
//随机生成一个0~数组长度的随机数,作为要放入乱序数组中原数组的index
var arrIndex = ~~(Math.random() * (arr.length))
// 判断随机生成的index是否重复放入乱序数组
if (!indexlist.find(t => t == arrIndex)) {
newarr.push(arr[arrIndex])
indexlist.push(arrIndex)
}
}
console.log(newarr)
return newarr
}
var arr = [6, 3, 6, 5,0, 7,79, 20, 8]
derangement(arr)