JS中樹形物件與陣列之間的相互轉換

2022-07-16 04:39:09 字數 1933 閱讀 4334

在工作中經常會遇到樹形結構的物件轉為陣列或者陣列轉為樹形物件的需求,那麼如何實現呢?

1、首先是要將乙個具有樹形結構的陣列轉化為樹形結構的物件

//

將乙個扁平化的物件陣列,轉化為樹形結構

//現在有乙個物件組成的陣列,每個元素有id屬性和parent_id屬性,根據其id屬性和parent_id屬性,將其轉換為樹結構的物件

const arr =[,,

,,,,

,,,,

,,,,

,,

,

];//

將這樣乙個陣列,變成能夠以樹形展示的物件

//先將陣列中的每乙個節點放到temp物件中(建立set)

//即陣列中有這樣乙個節點,需要將他放到temp中變成 '2-3': 這種json結構

//直接遍歷整個temp物件,通過這句**   temp[temp[i].parent_id].children[temp[i].id] = temp[i]; 

//將當前子節點與父節點建立連線。是因為我們保證了父節點一定在子節點前,

//那麼當子節點出現的時候就直接可以用temp[temp[i].parent_id]來查詢到父節點這個時候先父節點的children物件中新增乙個引用即可。

function

buildtree(array,id,parent_id) ;

//建立需要返回的樹形物件

let tree ={};

//先遍歷陣列,將陣列的每一項新增到temp物件中

for(let i in

array)

/*上面也可以寫成

for(let i=0;i*/

//遍歷temp物件,將當前子節點與父節點建立連線

for(let i in

temp)

temp[temp[i][parent_id]].children.push(temp[i]);

} else

}/*上面也可以寫成

for(let i=0;i*/

console.timeend('123');

return

tree;

}const obj = buildtree(arr, 'id', 'parent_id');

console.log(obj);

2、樹形結構轉化為一維扁平陣列

const treeobj =,    

,

]},

,

,

]}, ]},

,

,

]},

,

,

]},

,

]},

,

,

]}, ]},

]};//

將treeobj中的所有物件,放入乙個陣列中,要求某個物件在另乙個物件的children時,其parent_id是對應的另乙個物件的id

//其原理實際上是資料結構中的廣度優先遍歷

function

tree2array(treeobj, rootid) } }

return

out}

console.log(tree2array(treeobj, 'root'))

//深拷貝

function

deepcopy(obj)

return

object

}//深度複製物件

if(object.prototype.tostring.call(obj) === "[object object]");

for(let p in

obj)

return

object

}}

js中的物件與陣列

js物件與陣列是js中最基本的概念,定義物件時可用 var a 定義乙個空物件 定義陣列時可用 var a 定義乙個空字串。在物件中只是存在屬性,屬性與值之間用 相隔,不同屬性 相隔,屬性值可使用匿名函式,當然也可以使用實名函式 function a 在陣列中,不同值是獨立的,需要 相隔 陣列可包含...

DOM物件 與 jQuery物件 之間的相互裝換

示例 1 jquery物件轉dom物件2 因為jquery物件是乙個陣列物件,所以轉換為dom物件時要用索引的形式 3var div1 div1 jquery物件 4var div1 div1 0 轉換為了dom物件 5var div2 div1.get 0 和上面一行效果一樣 6 div1.inn...

Json 與 物件 之間相互轉換

情況一 json 轉 物件 string json this.redisutils.get itemdesc itemid if stringutils.isnoneblank json 情況二 物件 轉 json picuploadresult picuploadresult new picupl...