js 把线性的数据结构改成树形结构

来源:互联网 发布:java截取汉字字符串 编辑:程序博客网 时间:2024/05/21 05:19

把数组的数据结构改成树形结构。

var aaa = [{name:"111", id: 1, pId: 0, children: []},{name:"222", id: 6, pId: 0, children: []},{name:"b", id: 2, pId: 1, children: []},{name:"c", id: 3, pId: 1, children: []},{name:"d", id: 4, pId: 2, children: []},{name:"d", id: 4, pId: 6, children: []},]function Tree(data) {this.tree = data||[]; //数据this.groups = {}; //分组}Tree.prototype = {init: function(pid) {this.group();var data = this.getData(this.groups[pid]);return data;},group: function () {        for(var i=0; i<this.tree.length; i++){            if(this.groups[this.tree[i].pId]){                this.groups[this.tree[i].pId].push(this.tree[i]);            }else{                this.groups[this.tree[i].pId]=[];                this.groups[this.tree[i].pId].push(this.tree[i]);            }        }},getData: function (info) { if (!info) return;var children = [];for (var i = 0; i < info.length; i++) {var item = info[i];item.children = item['children'].concat(this.getData(this.groups[item.id]));children.push(item);}return children;}}var d = new Tree(aaa).init(0);console.log(JSON.stringify(d));

我的主要思路是有两步。

1 分组

将所有pId 相同的数据放入一个数组中,

2 从树形结构的最顶层开始查找(pId = 0)。来根据id 递归查找子集。


原创粉丝点击