超优雅!node.js 无限级分类,无递归获取所有下级分类ID。
昨天帮同事解决问题,于是诞生了“超优雅!两行代码搞定 php 无限级分类 获取顶级分类ID”这篇文章。
晚上回家做自己的node.js
项目的时候,又遇到关于无限级分类
的问题了。
其实也不是“遇到”,而是强迫症发作 不睡觉 干脆起床,把之前用递归
现实的版本,改成用循环
实现了。
这次要解决的问题是:根据分类ID
,获取所有下级分类的ID
,
这里说的“所有下级分类”,是包含下级、下下级、下下下级……
另外刚好在学习ES6
,于是用上了Set
对象。
首先还是要将数据处理成{ id:pid, ... }
这种格式,以下是我的数据。
var idPidArr = {
'1': 2,
'2': 0,
'3': 2,
'4': 43,
'5': 2,
'6': 2,
'7': 0,
'8': 0,
'9': 1,
'10': 1,
'11': 1,
'12': 1,
'13': 1,
'14': 1,
'15': 0,
'16': 1,
'17': 102,
'18': 43,
'19': 43,
'20': 3,
'21': 3,
'22': 43,
'23': 43,
'24': 5,
'25': 43,
'26': 43,
'27': 43,
'28': 4,
'29': 4,
'30': 4,
'31': 43,
'32': 111,
'33': 5,
'34': 43,
'35': 5,
'36': 88,
'37': 43,
'38': 43,
'39': 43,
'40': 6,
'41': 70,
'42': 6,
'43': 0,
'44': 43,
'45': 43,
'46': 8,
'47': 8,
'48': 43,
'49': 8,
'50': 43,
'51': 67,
'52': 125,
'53': 43,
'54': 43,
'55': 124,
'56': 0,
'57': 6,
'58': 6,
'59': 111,
'60': 43,
'61': 43,
'62': 56,
'63': 43,
'64': 4,
'65': 43,
'66': 43,
'67': 102,
'68': 43,
'69': 4,
'70': 102,
'71': 56,
'72': 124,
'73': 43,
'74': 43,
'75': 8,
'76': 17,
'77': 43,
'78': 0,
'79': 43,
'80': 43,
'81': 103,
'82': 15,
'83': 17,
'84': 3,
'85': 15,
'86': 3,
'87': 43,
'88': 43,
'89': 111,
'90': 43,
'91': 15,
'92': 6,
'93': 6,
'94': 43,
'95': 53,
'96': 103,
'97': 111,
'98': 6,
'99': 70,
'100': 15,
'101': 6,
'102': 0,
'103': 43,
'104': 103,
'105': 103,
'106': 103,
'107': 7,
'108': 7,
'109': 7,
'110': 7,
'111': 102,
'112': 8,
'113': 1,
'114': 103,
'115': 103,
'116': 43,
'117': 43,
'118': 43,
'119': 125,
'120': 111,
'121': 70,
'122': 111,
'123': 70,
'124': 8,
'125': 8,
'126': 124,
'127': 125,
'128': 88,
'129': 43,
'130': 3,
'131': 43,
'132': 43,
'133': 86,
'134': 21,
'135': 21,
'136': 86,
'137': 20,
'138': 20 };
然后 假设要获取分类 ID: 8 的所有下级分类的 ID。
var bmid = 8;
var pids = new Set([bmid]);
do {
var len = pids.size;
for(var id in idPidArr) {
if (pids.has(idPidArr[id])) {
pids.add(Number(id));
delete idPidArr[id]; // 感谢 @zhoutk 提醒
}
}
} while (pids.size>len);
console.log(Array.from(pids));
输出所有下级分类 ID 数组是 [ 8, 46, 47, 49, 75, 112, 124, 125, 126, 127, 52, 55, 72, 119 ]
然后……没有了,
为什么有一种虎头蛇尾的感觉呢?
代码已经够简洁了,应该不必逐行解释了吧……
王道中强流
不为繁华易匠心
推荐阅读
Linux自动备份MySQL
首先找到你的MySQL配置文件my.cnf {代码...} 然后修改它, {代码...} 在[client]里增加三行: {代码...} 本来不需要这些操作,直接把用户名密码写到备份脚本里就可以,但是 MySQL 5.6 之后在命令行里写密码会出现...
王道中强流阅读 2k
JavaScript有用的代码片段和trick
平时工作过程中可以用到的实用代码集棉。判断对象否为空 {代码...} 浮点数取整 {代码...} 注意:前三种方法只适用于32个位整数,对于负数的处理上和Math.floor是不同的。 {代码...} 生成6位数字验证码 {代码...} ...
jenemy赞 49阅读 7.3k评论 12
再也不学AJAX了!(二)使用AJAX ① XMLHttpRequest
「再也不学 AJAX 了」是一个以 AJAX 为主题的系列文章,希望读者通过阅读本系列文章,能够对 AJAX 技术有更加深入的认识和理解,从此能够再也不用专门学习 AJAX。本篇文章为该系列的第二篇,最近更新于 2023 年 1...
libinfs赞 42阅读 6.9k评论 12
「多图预警」完美实现一个@功能
一天产品大大向 boss 汇报完研发成果和产品业绩产出,若有所思的走出来,劲直向我走过来,嘴角微微上扬。产品大大:boss 对我们的研发成果挺满意的,balabala...(内心 OS:不听,讲重点)产品大大:咱们的客服 I...
wuwhs赞 32阅读 3.5k评论 5
安全地在前后端之间传输数据 - 「3」真的安全吗?
在「2」注册和登录示例中,我们通过非对称加密算法实现了浏览器和 Web 服务器之间的安全传输。看起来一切都很美好,但是危险就在哪里,有些人发现了,有些人嗅到了,更多人却浑然不知。就像是给门上了把好锁,还...
边城赞 29阅读 6.4k评论 5
2022大前端总结和2023就业分析
我在年前给掘金平台分享了《2022年热点技术盘点》的前端热点,算是系统性的梳理了一下我自己对前端一整年的总结。年后,在知乎上看到《前端的就业行情怎么样?》,下面都是各种唱衰前端的论调,什么裁员,外包化...
i5ting赞 27阅读 2.3k评论 4
深入理解React Diff算法
fiber上的updateQueue经过React的一番计算之后,这个fiber已经有了新的状态,也就是state,对于类组件来说,state是在render函数里被使用的,既然已经得到了新的state,那么当务之急是执行一次render,得到持有新...
nero赞 31阅读 11.8k评论 3
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。