list-to-tree
conver list to tree
JavaScript
function listToTree(data, options) {
options = options || {};
var ID_KEY = options.idKey || 'id';
var PARENT_KEY = options.parentKey || 'parent';
var CHILDREN_KEY = options.childrenKey || 'children';
var item, id, parentId;
var map = {};
for(var i = 0; i < data.length; i++ ) {
if(data[i][ID_KEY]){
map[data[i][ID_KEY]] = data[i];
data[i][CHILDREN_KEY] = [];
}
}
for (var i = 0; i < data.length; i++) {
if(data[i][PARENT_KEY]) { // is a child
if(map[data[i][PARENT_KEY]]) // for dirty data
{
map[data[i][PARENT_KEY]][CHILDREN_KEY].push(data[i]); // add child to parent
data.splice( i, 1 ); // remove from root
i--; // iterator correction
} else {
data[i][PARENT_KEY] = 0; // clean dirty data
}
}
};
return data;
}
var list = [{
"id": "12",
"parentId": "0",
"text": "Man",
"level": "1",
"children": null
}, {
"id": "6",
"parentId": "12",
"text": "Boy",
"level": "2",
"children": null
}, {
"id": "7",
"parentId": "12",
"text": "Other",
"level": "2",
"children": null
}, {
"id": "9",
"parentId": "0",
"text": "Woman",
"level": "1",
"children": null
}, {
"id": "11",
"parentId": "9",
"text": "Girl",
"level": "2",
"children": null
}];
listToTree(list, {
idKey: 'id',
parentKey: 'parentId',
childrenKey: 'children'
});
document.body.innerHTML = "<pre>" + (JSON.stringify(list, null, " "))