/**
数组数据转树数据
rows: 有 id 和 parentId, 比如 [{id: 1, parentId: null}, {id: 2, parentId: 1}]
nodes: 返回数据 [{id: 1, parentId: null, children: [{id: 2, parentId: 1}]}]
*/
function list2tree(rows) {
if(sUtils.isNull(rows) || rows.length == 0) {
return [];
}
// 判断有没有父节点
function exists(rows, parentId) {
for (var i = 0; i < rows.length; i++) {
if (rows[i].id == parentId) return true;
}
return false;
}
// 找到 parentId = null的节点
var nodes = [];
for (var i = 0; i < rows.length; i++) {
var row = rows[i];
if (!exists(rows, row.parentId)) {
// 复制数据,如果有 jquery ,则使用 $.extend 方法实现
var obj = {};
for (var key in row) {
obj[key] = row[key];
}
obj['expanded'] = true;
nodes.push(obj);
}
}
var toDo = [];
for (var i = 0; i < nodes.length; i++) {
toDo.push(nodes[i]);
}
while (toDo.length) {
var node = toDo.shift();
for (var i = 0; i < rows.length; i++) {
var row = rows[i];
if (row.parentId == node.id) {
var child = {};
for (var key in row) {
child[key] = row[key];
}
if (node.children) {
node.children.push(child);
} else {
node.children = [child];
}
toDo.push(child);
}
}
}
return nodes;
}
数组数据转树数据
rows: 有 id 和 parentId, 比如 [{id: 1, parentId: null}, {id: 2, parentId: 1}]
nodes: 返回数据 [{id: 1, parentId: null, children: [{id: 2, parentId: 1}]}]
*/
function list2tree(rows) {
if(sUtils.isNull(rows) || rows.length == 0) {
return [];
}
// 判断有没有父节点
function exists(rows, parentId) {
for (var i = 0; i < rows.length; i++) {
if (rows[i].id == parentId) return true;
}
return false;
}
// 找到 parentId = null的节点
var nodes = [];
for (var i = 0; i < rows.length; i++) {
var row = rows[i];
if (!exists(rows, row.parentId)) {
// 复制数据,如果有 jquery ,则使用 $.extend 方法实现
var obj = {};
for (var key in row) {
obj[key] = row[key];
}
obj['expanded'] = true;
nodes.push(obj);
}
}
var toDo = [];
for (var i = 0; i < nodes.length; i++) {
toDo.push(nodes[i]);
}
while (toDo.length) {
var node = toDo.shift();
for (var i = 0; i < rows.length; i++) {
var row = rows[i];
if (row.parentId == node.id) {
var child = {};
for (var key in row) {
child[key] = row[key];
}
if (node.children) {
node.children.push(child);
} else {
node.children = [child];
}
toDo.push(child);
}
}
}
return nodes;
}
function changeTreeDataFun(data) {
var resData = [];
var seqindex = 1;
/** 判断是否为叶子节点,true: 是叶子节点, false: 不是叶子 */
function isLeafFun(d) {
if(d['children'] != null && d['children'].length > 0) {
return false;
}
return true;
}
/** 生成 jqgrid 节点数据 */
function createNewNode(d, level) {
var newNode = {};
for (var key in d) {
newNode[key] = d[key];
}
// 1. 是否叶子设置
newNode['isLeaf'] = isLeafFun(d);
// 2. 设置层
newNode['level'] = level;
// 5. 设置新 id
newNode['seqindex'] = seqindex++;
// 6. 清空 children
newNode['children'] = null;
return newNode;
}
// 递归
function changeTreeChildDataFun(children, level) {
for(var i=0; i< children.length; i++) {
var d = children[i];
var newNode = createNewNode(d, level);
if(!isLeafFun(d)) {
changeTreeChildDataFun(d['children'], (1 + level));
}
resData.push(newNode);
}
}
changeTreeChildDataFun(data, 0);
resData.sort(function (a, b) {
return a['seqindex'] - b['seqindex'];
});
return resData;
}
本文介绍了一种将数组形式的数据转换成树形结构的方法,并提供了一个辅助函数用于进一步处理树形数据,使其适用于如 jqGrid 等工具的展示需求。文章通过具体的 JavaScript 函数实现展示了如何构建树状数据结构及其子节点。
208

被折叠的 条评论
为什么被折叠?



