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, " "))