我现在有几个对象
var a = {
id:3,
child:1
};
var b = {
id:6,
child:3
};
var c = {
id:3,
child:2
};
var d = {
id:5,
child:4
}
var e = {
id:6,
child:5
}
想通过这些关系构造一个树状关系,不一定是二叉树,对象数量不确定,但是有类似上面的关系
请问怎么实现
var dataArry = [{id: 3, child: 1}, {id: 6, child: 3}, {id: 3, child: 2}, {id: 5, child: 4}, {id: 6, child: 5}];
var len = dataArry.length;
var flagArr = [];//记录数组中已经是别人儿子的元素的小标,因为只可能是一个元素的儿子,所有不用担心重复,除非数据本身有问题
//双层遍历对比所有的元素,看看一个元素是否是别人的儿子
for (var i = 0; i < len; i++) {
for (var j = i; j < len; j++) {
if (dataArry[i].id == dataArry[j].child) {
if (!dataArry[j].childs) {
dataArry[j].childs = [];
}
dataArry[j].childs.push(dataArry[i]);
flagArr.push(i);
}
if (dataArry[j].id == dataArry[i].child) {
if (!dataArry[i].childs) {
dataArry[i].childs = [];
}
dataArry[i].childs.push(dataArry[j]);
flagArr.push(j);//记录下已经成为别人儿子的元素
}
}
};
function sortNumber(a, b) {
return a - b
}
//将数组排序
flagArr=flagArr.sort(sortNumber);
//将这些已经变成别人儿子的元素从数组中删除,剩下的便是树
for(var i=flagArr.length-1;i>=0;i--){
flagArr[i];
dataArry.splice(flagArr[i],1);
}
console.log(dataArry);
var dataArry = [{id: 3, child: 1}, {id: 6, child: 3}, {id: 3, child: 2}, {id: 5, child: 4}, {id: 6, child: 5}];
var len = dataArry.length;
var flagArr = [];//记录数组中已经是别人儿子的元素的小标,因为只可能是一个元素的儿子,所有不用担心重复,除非数据本身有问题
//双层遍历对比所有的元素,看看一个元素是否是别人的儿子
for (var i = 0; i < len; i++) {
for (var j = i; j < len; j++) {
if (dataArry[i].id == dataArry[j].child) {
if (!dataArry[j].childs) {
dataArry[j].childs = [];
}
dataArry[j].childs.push(dataArry[i]);
flagArr.push(i);
}
if (dataArry[j].id == dataArry[i].child) {
if (!dataArry[i].childs) {
dataArry[i].childs = [];
}
dataArry[i].childs.push(dataArry[j]);
flagArr.push(j);//记录下已经成为别人儿子的元素
}
}
};
function sortNumber(a, b) {
return a - b
}
//将数组排序
flagArr=flagArr.sort(sortNumber);
//将这些已经变成别人儿子的元素从数组中删除,剩下的便是树
for(var i=flagArr.length-1;i>=0;i--){
flagArr[i];
dataArry.splice(flagArr[i],1);
}
console.log(dataArry);