您的位置:首页 > Web前端

前端面试题:企业面试真题—10

2020-08-20 13:48 991 查看
完成函数genData(count) , 它返回count条 树结构的数据, 结构如下:

------------------

[code][
{ id:0, name: 'BBLFL', parent: null },
{ id:1, name: 'GLNNS', parent: 0 },
{ id:2, name: 'BXDSL', parent: 0 },
{ id:3, name: 'ADFGL', parent: 0 },
{ id:4, name: 'EOIRG', parent: 0 },
{ id:5, name: 'ZMCKV', parent: 5 },
{ id:6, name: 'QPLKG', parent: 0 },
{ id:7, name: 'SBVNC', parent: 6 },
{ id:8, name: 'KHJRI', parent: 0 },
{ id:9, name: 'BYUOIW', parent: 2 },
{ id:10, name: 'WKPQA', parent: 8 },
{ id:11, name: 'CKVBN', parent: 2 },
{ id:12, name: 'LKAOD', parent: 0 },
]

节点的name 随机生成, 整个树的结构 随机生成

[code]function randomInt(min,max){
return parseInt(Math.random()*(max-min)) + min
}
function randomName(size){
var str = "";
for(var i=0; i<size; i++) str+=String.fromCharCode(randomInt(65,91))
return str;
}
function genData(count){
var list = [];
for(var i=0; i<count; i++){
var pid = i==0 ? null : list[randomInt(0, list.length)].id;
var node = {
id: i,
name: randomName(5),
parent: pid
}
list.push(node)
}
return list;
}

 

完成函数drawLite( data ), 其中data是 genData( count )函数的返回值, 打印出树的结构:

[code]BBLFL
GLNNS
BYUOIW
CKVBN
BXDSL
ADFGL
EOIRG
ZMCKV
SBVNC
QPLKG
KHJRI
WKPQA
LKAOD

 

[code]function drawLite(data) {
//克隆副本
var newdata = JSON.parse(JSON.stringify(data));
function print(pid,level) {
var nowlist = [];
var i=0;
while(i<newdata.length) { //取出所有pid的子元素
if(newdata[i].parent === pid) {
//做删除操作,是为了减少数组长度,后续的查找速度可以越来越快
nowlist.push(newdata.splice(i,1)[0])
} else {
i++
}
}
//打印这些子元素的同时
nowlist.forEach(function(item){
console.log("  ".repeat(level)+item.name);
//将当前元素id作为pid,遍历子元素, level+1,表示打印时多一格缩进
print(item.id, level+1);
})
}
print(null,0)
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: