前面我們封裝了一維數組(具備樹形結構相關屬性)處理成樹形結構的方法: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
腳踏實地行,海闊天空飛~