js樹形數據結構的扁平化


前面我們封裝了一維數組(具備樹形結構相關屬性)處理成樹形結構的方法:https://www.cnblogs.com/coder--wang/p/15013664.html

接下來我們來一波反向操作,封裝一個可以將樹形結構的數據扁平化的方法。這種場景在業務中還是很常見的,比如一個級聯選擇器,有時候你需要判斷某個id或者某個字段,是否存在於該級聯選擇器的多維數組中,亦或者你需要將該多維數組中的字段進行處理,那么此時,對這個樹形的復雜數組進行降維就顯得很有必要了!下面直接上代碼:

 1 /**
 2  * 
 3  * @param {Array} arrs 樹形數據
 4  * @param {string} childs 樹形數據子數據的屬性名,常用'children'
 5  * @param {Array} attrArr 需要提取的公共屬性數組(默認是除了childs的全部屬性)
 6  * @returns 
 7  */
 8 function extractTree(arrs,childs,attrArr){
 9   let attrList = [];
10   if(!Array.isArray(arrs)&&!arrs.length)return [];
11   if(typeof childs !== 'string')return [];
12   if(!Array.isArray(attrArr)||Array.isArray(attrArr)&&!attrArr.length){
13     attrList = Object.keys(arrs[0]);
14     attrList.splice(attrList.indexOf(childs), 1);
15   }else{
16     attrList = attrArr;
17   }
18   let list = [];
19   const getObj = (arr)=>{
20     arr.forEach(function(row){
21       let obj = {};
22       attrList.forEach(item=>{
23         obj[item] = row[item];
24       });
25       list.push(obj);
26       if(row[childs]){
27         getObj(row[childs]);
28       }
29     })
30     return list;
31   }
32   return getObj(arrs);
33 }

運行:

 

 收工!對樹形結構數據的組裝和降維都已經實現,希望給大家帶來一些幫助,有bug或不足歡迎給我留言哦~

更多項目中常見的方法封裝,傳送門https://github.com/wangruibin666/wang-utils 

腳踏實地行,海闊天空飛~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM