昨天幫同事解決問題,因而誕生了「超優雅!兩行代碼搞定 php 無限級分類 獲取頂級分類ID」這篇文章。php
晚上回家作本身的node.js
項目的時候,又遇到關於無限級分類
的問題了。
其實也不是「遇到」,而是強迫症發做 不睡覺 乾脆起牀,把以前用遞歸
現實的版本,改爲用循環
實現了。html
此次要解決的問題是:根據分類ID
,獲取全部下級分類的ID
,
這裏說的「全部下級分類」,是包含下級、下下級、下下下級……node
另外恰好在學習ES6
,因而用上了Set
對象。
首先仍是要將數據處理成{ id:pid, ... }
這種格式,如下是個人數據。segmentfault
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 ]
學習
而後……沒有了,
爲何有一種有始無終的感受呢?
代碼已經夠簡潔了,應該沒必要逐行解釋了吧……code
哎~ 爲何我能夠寫出如此精妙的代碼,
卻永遠猜不透「石化油服」的走勢!!!
來一首五月天的《超人》體會一下我此刻的心情。htm