昨天帮同事解决问题,于是诞生了“ 超优雅!两行代码搞定 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 ]
然后……没有了,
为什么有一种虎头蛇尾的感觉呢?
代码已经够简洁了,应该不必逐行解释了吧……
哎~ 为什么我可以写出如此精妙的代码,
却永远猜不透“石化油服”的走势!!!
来一首 五月天的《超人》 体会一下我此刻的心情。