javascript一维数组递归排序方法
发表于:2022-09-30 10:12:06浏览:1349次
用递归思想做的一个数组排序,优点是速度极快,适合大数据运算。递归遍历,理论上,只要内存够用,你能实现任意层级的遍历,但缺点也很明显,没一个层级里面需要有固定的数据格式,否则无法遍历。
const data = [
{id: 1, name: '勾股CMS', pid: 0, order: 2},
{id: 2, name: '勾股OA', pid: 0, order: 1},
{id: 3, name: '勾股DEV', pid: 1, order: 5},
{id: 4, name: '勾股BLOG', pid: 1, order: 3},
{id: 5, name: '勾股ADMIN', pid: 0, order: 0},
]
let sortData = []
function recursiveSortData(d, pid, arr) {
let filterD = d.filter(item => item.pid === pid);
filterD.sort((a, b) => a.order - b.order);
filterD.forEach(item => {
arr.push(item)
recursiveSortData(data, item.id, arr)
})
}
recursiveSortData(data, 0, sortData)
console.log(sortData, data)
总结
1.很多时候可以用递归代替循环,可以理解为递归是一种特殊的循环,但通常情况下不推荐这样做。
2.递归一般是在函数里面把函数自己给调用一遍,通过每次调用改变条件,来结束循环。
3.递归在数据格式一致,在数据层级未知的情况下,比普通的遍历更有优势。
4.递归在异步的时候,更容易理解,且更容易实现,因为可以在异步的回调里面,调用自己来实现每次都能拿到异步的结果再进行其他操作。
5.递归实现的快速排序比普通遍历实现的排序效率更好。
推荐文章
- 今晚新剧,碧血玄黄7/8集:金锋动,银剑现,道象阴阳变
- ThinkPHP6的中间件讲解及路由配置
- 又一轻量级的开源Linux服务器管理面板mdserver-web推荐
- TinyMCE是一个轻量、简洁、功能强大的富文本编辑器
- 微信浏览器或手机浏览器字体大小调整 导致H5页面布局错乱解决方案
- 微信淘宝实现互通?有关部门开始要求即时通信软件解除屏蔽网址链接,公平竞争
- 新一代的CRM系统的操作权限和数据权限的设计
- composer install常见错误解决方案 --ignore-platform-reqs解决版本冲突
- ThinkPHP部署到nginx的详细步骤
- windows11系统,小乌龟TortoiseGit、TortoiseSvn的红黄绿图标不见了的解决方案