摘要:昨天帮同事解决问题,于是诞生了超优雅两行代码搞定无限级分类获取顶级分类这篇文章。这次要解决的问题是根据分类,获取所有下级分类的,这里说的所有下级分类,是包含下级下下级下下下级另外刚好在学习,于是用上了对象。
昨天帮同事解决问题,于是诞生了“超优雅!两行代码搞定 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...
阅读 2674·2021-11-11 17:21
阅读 574·2021-09-23 11:22
阅读 3552·2019-08-30 15:55
阅读 1608·2019-08-29 17:15
阅读 530·2019-08-29 16:38
阅读 871·2019-08-26 11:54
阅读 2454·2019-08-26 11:53
阅读 2726·2019-08-26 10:31