完成函数genData(count) , 它返回count条 树结构的数据, 结构如下:
------------------
[
{ 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 随机生成, 整个树的结构 随机生成
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 )函数的返回值, 打印出树的结构:
BBLFL
GLNNS
BYUOIW
CKVBN
BXDSL
ADFGL
EOIRG
ZMCKV
SBVNC
QPLKG
KHJRI
WKPQA
LKAOD
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)
}
文章转载自知乎: 千锋HTML5学院
原文链接:企业面试真题--010