js 數組對象樹形 遞歸過濾


在項目開發過程中遇到,需要遞歸過濾的樹形對象數組,

上代碼:

這是我的表格頭數據,我需要通過點擊一個select下拉框分別顯示含稅、不含稅、全部顯示的表頭,后端就一個接口默認返回所有的數據,這時候就需要前端來通過動態修改表頭實現

 column: [
                    {label: '科目編碼', prop: 'subjectCode', width: '142px'},
                    {label: '科目名稱', prop: 'subjectName', width: '140px'},
                    {
                        label:'總成本(含稅)',
                        children:[
                            { label: '目標成本', prop: 'totalTargetCostTax', width: '120px',  },
                            { label: '動態成本', prop: 'totalDynamicCostTax', width: '120px',  },
                            { label: '目標建築單方', prop: 'totalUnilateralConstructionTax', width: '140px',  },
                            { label: '動態建築單方', prop: 'totalDynamicConstructionTax', width: '140px',  },
                            { label: '動態可售單方', prop: 'totalDynamicSellTax', width: '140px',  },
                            
                        ]
                    },                            
                    {
                        label:'總成本(不含稅)',
                        children:[
                            { label: '目標成本', prop: 'totalTargetCost', width: '120px',},
                            { label: '動態成本', prop: 'totalDynamicCost', width: '120px', },
                            { label: '目標建築單方', prop: 'totalUnilateralConstruction', width: '140px', },
                            { label: '動態建築單方', prop: 'totalDynamicConstruction', width: '140px', },
                            { label: '動態可售單方', prop: 'totalDynamicSell', width: '140px', },
                            
                        ]
                    },    
                ]

由於我這表格是樹型結構的,我不知道有幾層,所以需要用到遞歸,過濾需要有判讀條件,當時只想到 includes方法判斷有沒有 ‘含稅’ 或者 ‘不含稅’來過濾返回相應的column數據

所以就是

  // 遞歸過濾
    switchDataVersonName(column, text){
      // column 是表格數據, text是判斷是否是含稅
// 先過濾第一層
     let newColumn = column.filter(item => !item.label.includes(text))
    // 得到新的數組,但只是第一層的過濾,需要再次循環然后 判斷有children的時候 在調用一次本函數 傳入 x.children,還有判斷條件 newColumn.forEach(x
=> x.children && (x.children = this.switchDataVersonName(x.children, text)))
    // 最后把新數組 return 出去
return newColumn },

1、傳入不含稅就顯示含稅的 表格表頭

2、傳入含稅就顯示不含稅的 表格表頭

3、全部就不用這個過濾函數直接返回原來表格表頭

然后就是實現了


免責聲明!

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



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