摘要:昨天幫同事解決問題,于是誕生了超優雅兩行代碼搞定無限級分類獲取頂級分類這篇文章。這次要解決的問題是根據分類,獲取所有下級分類的,這里說的所有下級分類,是包含下級下下級下下下級另外剛好在學習,于是用上了對象。
昨天幫同事解決問題,于是誕生了“超優雅!兩行代碼搞定 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 ]
然后……沒有了,
為什么有一種虎頭蛇尾的感覺呢?
代碼已經夠簡潔了,應該不必逐行解釋了吧……
哎~ 為什么我可以寫出如此精妙的代碼,
卻永遠猜不透“石化油服”的走勢!??!
來一首五月天的《超人》體會一下我此刻的心情。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78862.html
摘要:有這樣一個表,是分類的,是分類名稱,是上級分類的?,F在有個分類,程序要找到它上級的上級的上級分類的,簡單說就是找出頂級分類的。比如新鮮水果的是,對應父類是,而的父是,沒有父類,也就是頂級分類了。 有這樣一個表,id是分類的ID,name是分類名稱,pid是上級分類的ID。showImg(https://segmentfault.com/img/bVtnrg); 現在有個分類ID,程序要...
摘要:第三條同樣需要遞歸,因為通過一個分類,數據庫中只存儲了其直屬父類,需要通過遞歸到頂級分類才能獲取到它們之間的所有分類信息。 原文發表于我的博客: https://blog.kaciras.net/article/36 在一些系統中,對內容進行分類是必需的功能。比如電商就需要對商品做分類處理,以便于客戶搜索;論壇也會分為很多板塊;門戶網站、也得對網站的內容做各種分類。 分類對于一個內容展...
無限級分類 是一種很常見,很必須的功能,幾乎每個項目都有。 應用場景:下拉列表,樹型列表等 無限級分類的類型 前端實現(前端框架一般已經實現好了,只要后端按照指定格式傳數據給前端就可以生成了) 后端實現(下面主要講這種實現) 無限級多種實現 第一種(推薦) function infiniteSort($data, $showFName, $titleFName, $pidFName = p...
閱讀 2729·2021-11-11 17:21
閱讀 619·2021-09-23 11:22
閱讀 3583·2019-08-30 15:55
閱讀 1647·2019-08-29 17:15
閱讀 580·2019-08-29 16:38
閱讀 913·2019-08-26 11:54
閱讀 2513·2019-08-26 11:53
閱讀 2758·2019-08-26 10:31