企业面试真题--010

完成函数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

猜你喜欢

转载自blog.csdn.net/sdasadasds/article/details/107368355