版权声明:本文为博主原创文章,未经博主允许不得转载。(转载请指明出处) https://blog.csdn.net/zhangjing0320/article/details/84104406
这个方法有局限性,必须事先知道根节点的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));
结果:
等后续我想到好的方法,或者看到好的方法再来写。