js如何让一个数组每一次都不规则排序

文章介绍了一种通过递归和自执行函数实现数组不规则排序的技巧。首先创建新数组,然后通过随机获取原数组的下标并移除该元素,重复此过程直到原数组为空。这种方法利用了闭包,但需要注意可能造成的内存泄露问题,尤其是处理大数据量时。作者鼓励读者探索更多解题思路并分享讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这也是一个面试考题,说如何让一个数组,每次刷新的不规则排序,也就是每次刷新后排序都不一样

 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;

这里我使用了自执行函数,以及闭包机制,因为这里是闭包,所以建议大家要是用到我这个方法的话,建议释放一下缓存,可能我这个数组很少,但如果在项目中要是使用的话,数据量过大会造成内存泄露,解题思路有很多,代码这个东西,只要你能想到就是一个很好的方法,此方法仅供参考,要是大家有更好的方法,可以一起来探讨 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值