摘要:昨天帮同事解决问题,于是诞生了超优雅两行代码搞定无限级分类获取顶级分类这篇文章。这次要解决的问题是根据分类,获取所有下级分类的,这里说的所有下级分类,是包含下级下下级下下下级另外刚好在学习,于是用上了对象。
昨天帮同事解决问题,于是诞生了“超优雅!两行代码搞定 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 ]
然后……没有了,
为什么有一种虎头蛇尾的感觉呢?
代码已经够简洁了,应该不必逐行解释了吧……
哎~ 为什么我可以写出如此精妙的代码,
却永远猜不透“石化油服”的走势!!!
来一首五月天的《超人》体会一下我此刻的心情。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/78862.html
摘要:有这样一个表,是分类的,是分类名称,是上级分类的。现在有个分类,程序要找到它上级的上级的上级分类的,简单说就是找出顶级分类的。比如新鲜水果的是,对应父类是,而的父是,没有父类,也就是顶级分类了。 有这样一个表,id是分类的ID,name是分类名称,pid是上级分类的ID。showImg(https://segmentfault.com/img/bVtnrg); 现在有个分类ID,程序要...
摘要:第三条同样需要递归,因为通过一个分类,数据库中只存储了其直属父类,需要通过递归到顶级分类才能获取到它们之间的所有分类信息。 原文发表于我的博客: https://blog.kaciras.net/article/36 在一些系统中,对内容进行分类是必需的功能。比如电商就需要对商品做分类处理,以便于客户搜索;论坛也会分为很多板块;门户网站、也得对网站的内容做各种分类。 分类对于一个内容展...
无限级分类 是一种很常见,很必须的功能,几乎每个项目都有。 应用场景:下拉列表,树型列表等 无限级分类的类型 前端实现(前端框架一般已经实现好了,只要后端按照指定格式传数据给前端就可以生成了) 后端实现(下面主要讲这种实现) 无限级多种实现 第一种(推荐) function infiniteSort($data, $showFName, $titleFName, $pidFName = p...
阅读 2850·2021-11-11 17:21
阅读 824·2021-09-23 11:22
阅读 3661·2019-08-30 15:55
阅读 1712·2019-08-29 17:15
阅读 640·2019-08-29 16:38
阅读 1033·2019-08-26 11:54
阅读 2696·2019-08-26 11:53
阅读 2836·2019-08-26 10:31