2013-03-13 3 views
1

Так что для PHP У меня есть удобный набор функций для выполнения в in_array на несколько тусклых массивах:Простого Javascript in_array рекурсивной функции

function in_array_r($needle, $haystack, $strict = false) { 
    foreach ($haystack as $item) { 
     if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) { 
      return true; 
     } 
    } 
    return false; 
} 

Однако я попытался воссоздать один похожий в JavaScript, но я не могу показаться, чтобы получить это работать .. это то, что у меня есть:

function in_array_r(needle, haystack) { 
    var length = haystack.length; 
    for(var i = 0; i < length; i++) { 
     if(haystack[i] == needle){ 
      return true; 
     } 
     if(typeof haystack[i]=='object'){ 
      if(in_array_r(needle, haystack[i])){ 
       return true; 
      } 
     } 
    } 
    return false; 
} 

кто-нибудь может определить, почему она не работает, как я не могу понять, почему он не делает ..

Спасибо, Джон

+1

Какой результат вы получаете? Сообщения об ошибках? Образцы данных, чтобы попытаться вместе с ожидаемыми результатами также были бы полезными. –

+0

Есть ли у вас несколько тестов? – Eineki

+0

Ага, когда ключ не является числовым, терпит неудачу. – John

ответ

0

Это работает .. числовые и нецифровые ключи .. doh!

function in_array_r(needle, haystack) { 
    var length = haystack.length; 
    for(var key in haystack) { 
     if(haystack[key] == needle){ 
      return true; 
     } 
     if(typeof haystack[key]=='object'){ 
      if(in_array_r(needle, haystack[key])){ 
       return true; 
      } 
     } 
    } 
    return false; 
} 
Смежные вопросы