js list转tree
//------------------------------------List Convert to Tree ----------------------------------------------------// /** * 将list装换成tree 封装到JqueryUtils * @param {Object } id 节点主ID * @param {Object } pId 父节点ID * @param {Object } list list数据 * @return {Node} - 自定义Node树节点 * @author Jason - jasonandy@hotmail.com */ function listToTree(id,pId,list){ convertToNodeList(list); /** * @param {} list list * @param {} pId 父节点 * @return {Boolean} 是否存在父节点 * @description now.id = other.pid other 的父节点为 noew */ function exists(list, pId){ for(var i=0; i<list.length; i++){ if (list[i][id] == pId){ return true; } } return false; } /** * 树节点数据 最终数据结构 * @type Node treeNode */ var nodes = []; /** * 将所有的节点数据装入List * @type Number */ for(var i=0; i<list.length; i++){ var row = list[i]; if (!exists(list, row[pId])){//now.pid != new.id nodes.push(row);//new ids } } /** * 父节点 * @type Node */ var pNodes = []; /** * 将所有的子节点数据装入 pNodes * @type pNodes */ for(var i=0; i<nodes.length; i++){ pNodes.push(nodes[i]); } /** * 循环处理所有节点数据并进行封装 */ while(pNodes.length){ /** * 把数组的第一个元素从其中删除,并返回第一个元素的值 * the parent node */ var node = pNodes.shift(); /** * * get the children nodes */ for(var i=0; i<list.length; i++){ var row = list[i]; /** * 取出list所有数据 比较处理 * * 这里可以定制化 Node 节点数据结构 * { * "isActive": true, * "isRoot": true, * "title": "标题1", * "items": [ * { * "text": "内容1" * }, * { * "text": "内容2" * } * ] * } */ if (row[pId] == node[id]){ /** * 如果有items 直接放入 */ if (node.items){ node.items.push(row); } else { node.items = [row]; } pNodes.push(row); } } } return nodes; } /** * Node 节点数据封装 * @param {} list 转为map结构数据 * @return {} list 需要转换的list */ function convertToNodeList(list){ $.each(list,function(i,e){ e['title'] = e.NAME; e['isRoot'] = (e.PARENT_ID == '-1'); e['isActive'] = (e.ENABLE_STATUS == '01'); }) return list; } //------------------------------------List Convert to Tree End----------------------------------------------------//