[英]How to recursively get a list of all children in a nested object?
假设我有一个可以容纳其自身其他实例的类:
function Thing() {
this.subThings = [];
}
我将n
subThings
添加到顶部:
var rootThing = new Thing();
rootThing.subThings.push(new Thing());
rootThing.subThings.push(new Thing());
rootThing.subThings.push(new Thing());
然后我将n
subThings
添加到一些rootThing
的subThings
:
rootThing.subThings[0].subThings.push(new Thing());
rootThing.subThings[0].subThings.push(new Thing());
rootThing.subThings[0].subThings.push(new Thing());
此时,结构如下所示:
rootThing
|
+--subThing
| |
| +--subThing
| |
| +--subThing
| |
| +--subThing
|
+--subThing
|
+--subThing
所以,我怎么能得到的所有列表subThing
S和他们所有的subThing
S IN rootThing
?
function getAllChildren(beginNode) {
var allChildren = [];
beginNode.subThings.forEach(function(childNode) {
allChildren.push(childNode);
// allChildren = allChildren.concat(childNode.subThings); // something along these lines
});
return allChildren;
}
console.log(getAllChildren(rootThing));
感谢@zerkms,这是一个有效的实现:
function getAllChildren(beginNode) {
var allChildren = beginNode.subThings;
beginNode.subThings.forEach(function(childNode) {
allChildren = allChildren.concat(getAllChildren(childNode));
});
return allChildren;
}
您是否正在寻找这样的东西?
var GetAllThings = function(Thing thing) {
var result = [];
//Assume you want to remove the subthings as you flatten
var subthings = thing.subthings;
thing.subThings = null;
result.push(thing);
for(var i = 0; i < subthings i++) {
result.concat(GetAllThings(subthings[i]));
}
return result;
};
这基本上会使树变平,但是如果您只想查看/处理它,则上面的注释是正确的,因为您可以将其作为json对象处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.