生成mock tree数据的方法

发表于 JS 分类,标签:
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);

1 篇评论

发表我的评论