JavaScript的将JSON数组转换为树形结构
原理:
- 取数组的nodeId作为key循环生成一个新的json对象【map】。
- 然后取数组中的每一个json中parent的值作为key从新的json对象【map】中取值。
- 若有能取到值,说明该节点为孩子节点
代码:
入参为普通的json数组:
var resultArr = [
{
"labelValue": "root",
"nodeId": "root"
},
{
"labelValue": "root2",
"nodeId": "root2"
},
{
"parent": "root2",
"labelValue": "zjd33",
"nodeId": "zjd33"
},
{
"parent": "root2",
"labelValue": "zjd34",
"nodeId": "zjd34"
},
{
"nodeId": "root3",
"labelValue":"root3",
"nodeId":"root"
}
];
//数组转换为树形结构
function toTree(data) {
var result = [];
if (!Array.isArray(data)) {
return result
}
data.forEach(function (item){
delete item.children;
});
var map = {};
data.forEach(function (item) {
map[item.nodeId] = item;
});
data.forEach(function (item){
var parent = map[item.parent];
if (parent) {
(parent.children || (parent.children = [])).push(item);
} else {
result.push(item);
}
});
return result;
};