资讯专栏INFORMATION COLUMN

超优雅!node.js 无限级分类,无递归获取所有下级分类ID。

calx / 726人阅读

摘要:昨天帮同事解决问题,于是诞生了超优雅两行代码搞定无限级分类获取顶级分类这篇文章。这次要解决的问题是根据分类,获取所有下级分类的,这里说的所有下级分类,是包含下级下下级下下下级另外刚好在学习,于是用上了对象。

昨天帮同事解决问题,于是诞生了“超优雅!两行代码搞定 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

相关文章

  • 优雅!两行代码搞定 php 分类 获取分类ID

    摘要:有这样一个表,是分类的,是分类名称,是上级分类的。现在有个分类,程序要找到它上级的上级的上级分类的,简单说就是找出顶级分类的。比如新鲜水果的是,对应父类是,而的父是,没有父类,也就是顶级分类了。 有这样一个表,id是分类的ID,name是分类名称,pid是上级分类的ID。showImg(https://segmentfault.com/img/bVtnrg); 现在有个分类ID,程序要...

    hedzr 评论0 收藏0
  • 在数据库中存储一棵树,实现分类

    摘要:第三条同样需要递归,因为通过一个分类,数据库中只存储了其直属父类,需要通过递归到顶级分类才能获取到它们之间的所有分类信息。 原文发表于我的博客: https://blog.kaciras.net/article/36 在一些系统中,对内容进行分类是必需的功能。比如电商就需要对商品做分类处理,以便于客户搜索;论坛也会分为很多板块;门户网站、也得对网站的内容做各种分类。 分类对于一个内容展...

    Airy 评论0 收藏0
  • PHP 分类最佳实践

    无限级分类 是一种很常见,很必须的功能,几乎每个项目都有。 应用场景:下拉列表,树型列表等 无限级分类的类型 前端实现(前端框架一般已经实现好了,只要后端按照指定格式传数据给前端就可以生成了) 后端实现(下面主要讲这种实现) 无限级多种实现 第一种(推荐) function infiniteSort($data, $showFName, $titleFName, $pidFName = p...

    yzzz 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<