我有一个对象,可能包含对象(反过来可能包含或不包含对象,等等到无穷大),并带有字符串,如下所示:
var obj = { "foo": "hello", "bar": "hi", "test": { "foo": "foo" "bar": { "test": "hi", "hello": "howdy" } } }
我想要做的是计算整个obj
对象及其子对象的字符串数.在这个例子中,正确的答案是5.
关于计算此站点上的对象中的键的众多主题都建议使用循环.hasOwnProperty
或新的Object.keys(obj)
方式,但这些都不是递归的,并且它们都计算子对象本身.
完成此任务的最佳方法是什么?
您可以创建递归函数,循环嵌套对象并返回计数.
var obj = {
"foo": "hello",
"bar": "hi",
"test": {
"foo": "foo",
"bar": {
"test": "hi",
"hello": "howdy"
}
}
}
function countS(data) {
var c = 0;
for (var i in data) {
if (typeof data[i] == 'object') c += countS(data[i]);
if (typeof data[i] == 'string') c += 1
}
return c;
}
console.log(countS(obj))