1. 程式人生 > >關於一個數組轉樹狀陣列(有父子關係)

關於一個數組轉樹狀陣列(有父子關係)

這個方法有侷限性,必須事先知道根節點的parent.我自己寫的,有問題請留言告知,感激不盡。

var data = [{
	id: 6,
	parent: 0,
	name: '北京市'
}, {
	id: 1,
	parent: 0,
	name: '河北省'
}, {
	id: 4,
	parent: 2,
	name: '唐縣'
}, {
	id: 5,
	parent: 2,
	name: '順平'
}, {
	id: 7,
	parent: 6,
	name: '朝陽區'
}, {
	id: 8,
	parent: 6,
	name: '東城區'
}, {
	id: 2,
	parent:
1, name: '保定' }, { id: 3, parent: 1, name: '滄州' }]; function changeToTree(data) { var arr = []; var obj = {}; for (var i = 0; i < data.length; i++) { if (data[i].parent === 0) { arr.push( Object.assign({}, data[i], { children: [] }) ); } else { if (!obj[data[i].parent]
) { obj[data[i].parent] = []; } obj[data[i].parent].push( Object.assign({}, data[i], { children: [] }) ); } } callback(arr, obj); return arr; } function callback(arr, obj) { for (var j = 0;j < arr.length; j++) { for (var i = 0;i < Object.keys(obj).length; i++
) { var id = arr[j].id; if (obj[id]) { arr[j].children = [].concat(obj[id]); delete obj[id]; } else { callback(arr[j].children, obj); } } } if (Object.keys(obj).length > 0) { for (var j = 0;j < arr.length; j++) { for (var i = 0;i < Object.keys(obj).length; i++) { callback(arr[j].children, obj); } } } } console.log(changeToTree(data));

結果:
在這裡插入圖片描述

等後續我想到好的方法,或者看到好的方法再來寫。