Javascript 通过obj道具循环的递归函数不起作用
为什么只有警报1Javascript 通过obj道具循环的递归函数不起作用,javascript,Javascript,为什么只有警报1 function test() { var myobj = { a : '1st level prop', b : 'findme', c : { aa : '2nd level prop', bb : 'findme', cc : { aaa : '3rd level prop', bbb : 'findme' } } } function countem(needle,haystack) { v
function test() {
var myobj = {
a : '1st level prop',
b : 'findme',
c : {
aa : '2nd level prop',
bb : 'findme',
cc : {
aaa : '3rd level prop',
bbb : 'findme'
}
}
}
function countem(needle,haystack) {
var count = count || 0;
for(var i in haystack) {
if (typeof(haystack[i]) == 'object') {
countem(needle,haystack[i]);
} else {
if (needle == haystack[i]) {
count++;
}
}
}
return count;
}
alert(countem('findme',myobj));
}
您忘记在递归调用中添加计数
function test() {
var myobj = {
a : '1st level prop',
b : 'findme',
c : {
aa : '2nd level prop',
bb : 'findme',
cc : {
aaa : '3rd level prop',
bbb : 'findme'
}
}
}
function countem(needle,haystack) {
var count = 0;
for(var i in haystack) {
if (typeof(haystack[i]) == 'object') {
count = count + countem(needle,haystack[i]);
} else {
if (needle == haystack[i]) {
count++;
}
}
}
return count;
}
alert(countem('findme',myobj));
}
因为每次调用
countem
时都会重置count
if (typeof(haystack[i]) == 'object') {
count += countem(needle,haystack[i]);
}
我对JavaScript不太熟悉,但是数组和对象之间不是有区别吗?在我看来,
typeof(haystack[i])==“object”
返回false,因此只计算它找到的第一个。此外,它还应该将countem的结果添加到您的count中,因为它启动了一个新函数…@animuson:您不熟悉JavaScript,这是查看对象属性的方式是的,这就是解决方案,出于某种原因,我原以为计数会从内部函数冒泡出来,但我想我明白为什么不会发生这种情况。谢谢你的帮助!