从...变量深度对象的子对象的所有子对象获取属性

时间:2014-05-31 00:10:16

标签: javascript

我有一个像这样的对象

test: {
    title: '1'
    parent: {
        title: '0'
        parent: {
            title: '-1'
            parent: {
                title: '-2'
}   }   }   }

然后没有任何parent向下(对于这个test对象,但它可能是其他人)。

我需要为所有1 0 -1 -2个对象创建字符串test,无论其深度如何。

var title = test.title + test.parent.title + test.parent.parent.title + ...

但是,由于我事先并不知道链条对于所有这些链条有多深,并且对于不同的对象可能有所不同,有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

使用recursion,您可以遍历该对象,在每一步返回标题和子标题的串联。

var collectTitles = function (node) {
    var result = node.title;
    if (node.parent) {
        result += collectTitles(node.parent);
    }

    return result + ' ';
};

var title = collectTitles(test);

在第一步,collectTitles将会调用test; node.title为' 1',它将被设置为result变量的值。由于test包含parent,条件将匹配,collectTitles(test.parent)将依次评估,其结果将连接到' 1'。

test.parenttest.parent.parenttest.parent.parent.parent将重复相同的操作。对于最后一个,result将被设置为' -2',并且因为它没有parent,该函数将返回实际的&#39}。 -2'串。最终结果将是:

1·0·-1·-2·

如果无法接受前导空格,您可以执行以下操作之一: