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.
无论我把它放在什么对象上,我都希望它循环直到它获得所有字符串并将它们全部添加起来.
谢谢!
这是一个非常简单的实现,应该适用于这样的简单对象:
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"它仍然会返回相同的输出.