試試這個
function getDescendants(node, n) {
var descendants = [node];
for(var i=0; i<n; i++)
{
var descendant = [];
var childrenLength = 1;
if(i !== 0) {
childrenLength = descendants[i].length;
}
for(var j=0; j<childrenLength; j++)
{
var son;
if(i === 0) {
son = descendants[i].children;
} else {
son = descendants[i][j].children;
}
for(var k=0; k<son.length; k++)
{
descendant.push(son[k]);
}
}
descendants[i+1] = descendant;
if(descendants[i+1].length === 0) {
return '此節點不存有第' + n + '代後代.';
}
}
// return an Array
return descendants[n];
}
function getDescendants(node, n) {
var descendants = [node];
for(var i=0; i<n; i++)
{
var descendant = [];
var childrenLength = 1;
if(i !== 0) {
childrenLength = descendants[i].length;
}
for(var j=0; j<childrenLength; j++)
{
var son;
if(i === 0) {
son = descendants[i].children;
} else {
son = descendants[i][j].children;
}
for(var k=0; k<son.length; k++)
{
descendant.push(son[k]);
}
}
descendants[i+1] = descendant;
if(descendants[i+1].length === 0) {
return '此節點不存有第' + n + '代後代.';
}
}
// return an Array
return descendants[n];
}
循环看每个元素的第n个parentNode是否等于node 是的话push到一个数字里
遍历的过程中记录层标记,把同一层的拿出来,不需要全部遍历,只找到第n层就好
比较懒的话,广度优先把树保存起来,同时标记层起止位置,这样以后想要第几层直接从静态数组中拿就好,空间换时间ps楼上反向思维是个好方法,开销会不会有些大(哎?地上有块肥皂哎)