js根据id、pid把数据转为树结构
2016-06-22 11:38
330 查看
//格式化树数据
function toTreeData(data) {
var pos = {};
var tree = [];
var i = 0;
while (data.length != 0) {
if (data[i].pId == '0') {
tree.push({
id: data[i].id,
name: data[i].name,
children: []
});
pos[data[i].id] = [tree.length - 1];
data.splice(i, 1);
i--;
} else {
var posArr = pos[data[i].pId];
if (posArr != undefined) {
var obj = tree[posArr[0]];
for (var j = 1; j < posArr.length; j++) {
obj = obj.children[posArr[j]];
}
obj.children.push({
id: data[i].id,
name: data[i].name,
children: []
});
pos[data[i].id] = posArr.concat([obj.children.length - 1]);
data.splice(i, 1);
i--;
}
}
i++;
if (i > data.length - 1) {
i = 0;
}
}
return tree;
}
function toTreeData(data) {
var pos = {};
var tree = [];
var i = 0;
while (data.length != 0) {
if (data[i].pId == '0') {
tree.push({
id: data[i].id,
name: data[i].name,
children: []
});
pos[data[i].id] = [tree.length - 1];
data.splice(i, 1);
i--;
} else {
var posArr = pos[data[i].pId];
if (posArr != undefined) {
var obj = tree[posArr[0]];
for (var j = 1; j < posArr.length; j++) {
obj = obj.children[posArr[j]];
}
obj.children.push({
id: data[i].id,
name: data[i].name,
children: []
});
pos[data[i].id] = posArr.concat([obj.children.length - 1]);
data.splice(i, 1);
i--;
}
}
i++;
if (i > data.length - 1) {
i = 0;
}
}
return tree;
}
相关文章推荐
- JavaScript高级应用(一)
- Javascript编码规范
- Javascript对象字面量的理解
- javascript 面向对象(转)
- JavaScript Promise
- 001——缺少标签指令
- Javascript闭包与函数柯里化浅析
- Javascript :事件
- JS中innerHTML和pasteHTML的区别实例分析
- href="#"与href="javascript:void(0)"的区别
- JS实现pasteHTML兼容ie,firefox,chrome的方法
- 浅析JavaScript中命名空间namespace模式
- javascript:history.go()和History.back()的区别及应用
- js退后一步并刷新
- Javascript实现图片不间断滚动的代码
- js自定义事件
- 如何在外部JS中使用EL表达式或者c标签产生的值
- Javascript将双字节字符转换成单字节字符并计算长度
- js中的 !!
- Part 8: Understanding Backbone.js Events