1 Star 0 Fork 0

陈颖/virtual-table

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
generatr-tree.js 1.74 KB
一键复制 编辑 原始数据 按行查看 历史
陈颖 提交于 2022-01-07 11:46 . first commit
/**
* 随机生成 指定层级/指定length 的树
*/
const fs = require('fs')
let id = 1
class Node {
constructor() {
this.id = id
this.name = `name-${id}`
this.children = []
id++
}
}
function random (min, max) {
return Math.floor(Math.random() * (max - min + 1) + min)
}
function generateRandomTree (options) {
const { length, level, childrenLength } = options
const res = []
let maxDepth = 0
let maxChildLength = 0
function fn (totalLen, currentLevel = 1, currentChildren = res, depth = 1) {
if (currentLevel > level) return
for (let i = 0; i < totalLen; i++) {
const node = new Node
let _level = currentLevel
if (currentLevel === 1) {
const randomLevel = random(1, level)
_level = randomLevel
}
maxDepth = Math.max(maxDepth, depth)
fn2(node, _level, childrenLength, currentChildren, depth)
}
}
function fn2 (node, randomLevel, length, currentChildren, depth) {
const children = node.children
const randomLen = random(0, length)
currentChildren.push(node)
maxChildLength = Math.max(maxChildLength, currentChildren.length)
fn(randomLen, randomLevel + 1, children, depth + 1)
}
fn(length)
// 保证 最大深度和最多孩子 的存在
while (maxDepth < level || maxChildLength < childrenLength) {
res.length = 0
fn(length)
}
return res
}
const res = generateRandomTree({
// 100项的数组长度
length: 100,
// 最大深度为3,每一项数据的深度不确定,但是至少有一项数据的深度为最大深度
level: 3,
// 最多孩子的数量为2,每一项孩子的数量不固定,但是至少有一项数据的孩子数量为2
childrenLength: 2,
})
fs.writeFileSync('./test.json', JSON.stringify(res))
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/ChenYing1996/virtual-table.git
git@gitee.com:ChenYing1996/virtual-table.git
ChenYing1996
virtual-table
virtual-table
master

搜索帮助