如何在Javascript中编写递归函数来添加深层嵌套对象的所有字符串值?

Nic*_*ing -7 javascript recursion

说我有这个对象:

{
    "prop1":"Hello",
    "prop2":{
         "prop1":{
              "prop1":"Tablecloth",
              "prop2":"Indians"
                },
          "prop2":"JuicyJuice"
           },
    "prop3":"Sponge",
    "prop4":{"Bob":"Squarepants"}
}
Run Code Online (Sandbox Code Playgroud)

我想要一个将返回的递归函数HelloTableclothIndiansJuicyJuiceSpongeSquarepants.

无论我把它放在什么对象上,我都希望它循环直到它获得所有字符串并将它们全部添加起来.

谢谢!

p.s*_*w.g 5

这是一个非常简单的实现,应该适用于这样的简单对象:

var walkProps = function(obj) {
    var s = "";
    for(var x in obj)
    {
        if(typeof obj[x] === "string")
            s += obj[x];
        else
            s += walkProps(obj[x]);
    }
    return s;
}
Run Code Online (Sandbox Code Playgroud)

示范

但请注意,这取决于for-in访问对象属性的顺序,该对象未指定且可能因引擎和对象的构造方式而异(例如,添加属性的顺序).


更新:稍作修改,可用于根据键的字母顺序返回值.此方法对依赖于实现的属性排序不敏感:

var walkProps = function(obj) {
    var s = "", i = 0, keys = Object.keys(obj).sort(), i;
    for(; i < keys.length; i++)
    {
        if(typeof obj[keys[i]] === "string")
            s += obj[keys[i]];
        else
            s += walkProps(obj[keys[i]]);
    }
    return s;
}
Run Code Online (Sandbox Code Playgroud)

所以即使它"prop3"来之前"prop2"它仍然会返回相同的输出.

示范