function mockTreeData(count, min = 5, max = 50) {
// 父id
let pId = -1,
// 当前层级
level = 0,
// 当前层级的节点数
curLevel = [],
// 当前层级的父级层级
prevLevel = [],
// 每层级的数量
levelCount,
// 总节点变量
i = 0,
j,
l,
// 父节点所在层级的数据长度
prevLevelLen;
// 总节点数
const nodes = [];
// 该层级的节点最小数
const _min = min;
// 该层级的节点最大数
const _max = max;
// while循环
while (i < count) {
// 生成第一层级节点
if (level === 0) {
pId = -1;
// 设置该层级的数量
levelCount = Math.max(_min, Math.round(Math.random() * _max));
// 循环生成数据
// 双重判断, i<count (总数量) , j< levelCount (当前层级的数量)
for (j = 0; j < levelCount && i < count; j++, i++) {
const n = {
code: i,
pcode: pId,
level: level,
name: `Big-${i}`
};
// 总节点数
nodes.push(n);
// 当前层级的节点
curLevel.push(n);
}
} else {
// 父节点所在层级的数据长度
prevLevelLen = prevLevel.length;
// 循环父层级节点
for (l = 0; l < prevLevelLen && i < count; l++) {
// 设置该层级的pid
pId = prevLevel[l].code;
// 设置该层级的数量
levelCount = Math.max(_min, Math.round(Math.random() * _max));
// 循环生成各个父节点下的子数据
// // 双重判断, i<count (总数量) , j< levelCount (当前层级的数量)
for (j = 0; j < levelCount && i < count; j++, i++) {
const n = {
code: i,
pcode: pId,
level: level,
name: `Big-${i}`
};
// 总节点数
nodes.push(n);
// 当前层级的所有节点(包含父节点的兄弟节点下的所有子节点)
curLevel.push(n);
}
}
}
// 当前层级的节点赋值给前一个层级的节点
prevLevel = curLevel;
// 当前层级的节点清空
curLevel = [];
// 层级++
level++;
}
// 返回最终的节点数
return nodes;
}
// 直接使用
const treeData = mockTreeData(97500);
// 设置各层级子节点最大值,最小值
const treeData = mockTreeData(97500, 10, 50);
发表于 2021-06-24 下午 11:41:19
试试水