關於一個數組轉樹狀陣列(有父子關係)
阿新 • • 發佈:2018-12-21
這個方法有侷限性,必須事先知道根節點的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));
結果:
等後續我想到好的方法,或者看到好的方法再來寫。