Javascript 通过obj道具循环的递归函数不起作用

Javascript 通过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

为什么只有警报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) {
  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,这是查看对象属性的方式