超文雅!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 ]

然后……没有了,
为何有一种有头无尾的觉得呢?
代码已够简约了,应当没必要逐行诠释了吧……

哎~ 为何我能够写出云云精巧的代码,
却永久猜不透“石化油服”的走势!!!
来一首五月天的《超人》体味一下我现在的心境。

    原文作者:王道中强流
    原文地址: https://segmentfault.com/a/1190000004588206
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞