繁体   English   中英

如何递归获取嵌套对象中所有子项的列表?

[英]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添加到一些rootThingsubThings

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM