超優雅!node.js 無限級分類,無遞歸獲取全部下級分類ID。

昨天幫同事解決問題,因而誕生了「超優雅!兩行代碼搞定 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

相關文章
相關標籤/搜索