转载

超优雅!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) {         var pid = idPidArr[id];          if (pids.has(pid)) {             pids.add(Number(id));         }     } } 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
正文到此结束
Loading...