这也是一个面试考题,说如何让一个数组,每次刷新的不规则排序,也就是每次刷新后排序都不一样
let list = [1, 3, 5, 10, 11, 19, 20] //每次都不规则排序
我当时也就是大概讲解了一下解题的思路
解题思路:我第一个想到的就是递归方法,创建一个新的数组,先循环数组后,每次随机得到下标后,往新的数组里push下标参数后,在把下标这一项从数组里删除后,重复调用。
这个就是我大概的解题思路,后来回来后我自己试了一下这个方法,可以分享给大家
let list = [1, 3, 5, 10, 11, 19, 20] //每次都不规则排序
let fn = function (arr) {
let newList = [];
(function f(list) {
let num = Math.floor(Math.random() * list.length)
list.forEach((item, _index, olderArr) => {
if (olderArr.length) {
newList.push(arr[num])
arr.splice(num, 1)
f(arr)
}
return null
})
})(arr)
return newList;
}
console.log(fn(list));
fn = null;
这里我使用了自执行函数,以及闭包机制,因为这里是闭包,所以建议大家要是用到我这个方法的话,建议释放一下缓存,可能我这个数组很少,但如果在项目中要是使用的话,数据量过大会造成内存泄露,解题思路有很多,代码这个东西,只要你能想到就是一个很好的方法,此方法仅供参考,要是大家有更好的方法,可以一起来探讨