Vue將數(shù)組轉(zhuǎn)換為樹形結(jié)構(gòu)的兩種實現(xiàn)方式
Vue將數(shù)組轉(zhuǎn)換為樹形結(jié)構(gòu)的方式

第一種
遞歸實現(xiàn)數(shù)組轉(zhuǎn)為樹形結(jié)構(gòu)
第一步:
// 遞歸: 封裝一個函數(shù):將列表list數(shù)據(jù)轉(zhuǎn)換成數(shù)據(jù)樹形數(shù)據(jù)=>遞歸
// 遍歷樹形 有一個重點 要先找一個頭
function transListDataToTreeData(list, root) {
const arr = []
// 1.遍歷
list.forEach((item) => {
// 2.首次傳入空字符串 判斷l(xiāng)ist的pid是否為空 如果為空就是一級節(jié)點
if (item.pid === root) {
// 找到之后就要去找item下面有沒有子節(jié)點 以 item.id 作為 父 id, 接著往下找
const children = transListDataToTreeData(list, item.id)
if (children.length > 0) {
// 如果children的長度大于0,說明找到了子節(jié)點
item.children = children
}
// 將item項, 追加到arr數(shù)組中
arr.push(item)
}
})
return arr
}
//第二步:
// 調(diào)用轉(zhuǎn)化方法,轉(zhuǎn)化樹形結(jié)構(gòu) 賦值給data中定義的數(shù)組
this.departs = transListDataToTreeData(data.depts, '')
//第三步: 渲染到頁面
<!-- 樹形控件el-tree :data:指定數(shù)據(jù) props:屬性成員配置項 default-expand-all 控制是否默認展開-->
<!-- el-tree組件 里面內(nèi)容是插槽內(nèi)容 有多少個節(jié)點循環(huán)多少次 -->
<el-tree
:data="departs"
:props="defaultProps"
:default-expand-all="true"
>
</el-tree>第二種
下載三方插件 使用arrayTotree插件 將扁平化數(shù)組轉(zhuǎn)換為樹形結(jié)構(gòu)數(shù)組 并賦值給list
npm install array-to-tree --save import arrayToTree from 'array-to-tree'
data中的自定義數(shù)組 = arrayToTree(獲取請求的數(shù)組, { parentProperty: '父級id', customID: '二級id'});

數(shù)組扁平化:
arr = [[{},{}],[{},{}],[{},{}]]
const = data = [].concat(...arr.map((v) => v))
log(data) // [{…}, {…}, {…}, {…},...]const deepFlatten = arr => [].concat(...arr.map(v => (Array.isArray(v) ? deepFlatten(v) : v))); deepFlatten([1, [2], [[3], 4], 5]); // [1,2,3,4,5]
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- vue之字符串、數(shù)組之間的相互轉(zhuǎn)換方式
- vue使用el-table篩選tree樹形結(jié)構(gòu)的數(shù)據(jù)問題
- 基于vue實現(xiàn)多功能樹形結(jié)構(gòu)組件的示例代碼
- vue樹形結(jié)構(gòu)數(shù)據(jù)處理的方法總結(jié)
- Vue之Element級聯(lián)選擇器多選傳值以及回顯方式(樹形結(jié)構(gòu))
- vue遞歸組件實現(xiàn)樹形結(jié)構(gòu)
- Vue?elementUI實現(xiàn)樹形結(jié)構(gòu)表格與懶加載
- vue實現(xiàn)樹形結(jié)構(gòu)增刪改查的示例代碼
相關(guān)文章
使用axios請求時,發(fā)送formData請求的示例
今天小編就為大家分享一篇使用axios請求時,發(fā)送formData請求的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10
淺談vuejs實現(xiàn)數(shù)據(jù)驅(qū)動視圖原理
這篇文章主要介紹了淺談vuejs實現(xiàn)數(shù)據(jù)驅(qū)動視圖原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02
通過GASP讓vue實現(xiàn)動態(tài)效果實例代碼詳解
GASP是一個JavaScript動畫庫,它支持快速開發(fā)高性能的 Web 動畫。GASP 使我們能夠輕松輕松快速的將動畫串在一起,來創(chuàng)造一個高內(nèi)聚的流暢動畫序列。這篇文章主要介紹了通過GASP讓vue實現(xiàn)動態(tài)效果,需要的朋友可以參考下2019-11-11
淺析Vue3中Excel下載模板并導(dǎo)入數(shù)據(jù)功能的實現(xiàn)
這篇文章主要為大家詳細介紹了Vue3中的Excel數(shù)據(jù)管理,即下載模板并導(dǎo)入數(shù)據(jù)功能的實現(xiàn),文中的示例代碼講解詳細,感興趣的小伙伴可以參考一下2024-05-05
vue項目使用typescript創(chuàng)建抽象類及其使用方式
這篇文章主要介紹了vue項目使用typescript創(chuàng)建抽象類及其使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
基于Vue3?+?TS?+?Ant?Design?Vue?實現(xiàn)精細化菜單按鈕權(quán)限授權(quán)組件功能
本文將分享如何使用Vue3 + TypeScript + Vite + Ant Design Vue實現(xiàn)一個功能完善的菜單與按鈕級別的權(quán)限授權(quán)組件,支持樹形菜單選擇、動態(tài)按鈕聯(lián)動、狀態(tài)持久化等高級特性,感興趣的朋友一起看看吧2026-03-03

