2015-07-17 3 views
0

У меня проблемы с рекурсивным поиском. Я хочу, чтобы вернуть блок идентификатор был найден вJavascript рекурсивный поиск

Это мои данные:.

{ 
"rows": [{ 
    "columns": [{ 
     "id": "iE1YMSahu", 
     "rows": [{ 
      "columns": [{ 
       "id": "VJBjVrfP" 
      }, { 
       "id": "NJb1234A", 
       "rows": [{ 
        "columns": [{ 
         "id": "VJBjVXXX" 
        }, { 
         "id": "NJb1234B" 
        }] 
       }] 
      }] 
     }] 
    }, { 
     "id": "EJnASD-v", 
     "rows": [{ 
      "columns": [{ 
       "id": "VJBjVYYY" 
      }] 
     }] 
    }] 
}] 
} 

Он должен возвращаться

{ 
     "id": "EJnASD-v", 
     "rows": [{ 
      "columns": [{ 
       "id": "VJBjVYYY" 
      }] 
     }] 
    } 

Но вместо того, чтобы это возвращение ложным. Вот мой код:

function findColumnWithId(obj, id){ 
    for(var i = 0; i < obj['rows'].length; i++){ 
     for(var j = 0; j < obj['rows'][i]['columns'].length; j++){ 
      if(obj['rows'][i]['columns'][j].id == id) 
       return obj; 

      if(obj['rows'][i]['columns'][j].hasOwnProperty('rows')){ 
       var result = findColumnWithId(obj['rows'][i]['columns'][j], id); 

       if(typeof result !== false) 
        return result; 
      } 
     } 
    } 

    return false; 
} 

findColumnWithId(data, 'VJBjVYYY'); 

Я действительно не уверен, что происходит. Кажется, что он не повторяет последнюю часть данных Json. Этот код действительно работает в 5 из моих 6 случаев использования, что делает его еще более странным. Любая помощь будет оценена по достоинству.

+4

Почему вы пишете 'typeof result! == false'? Что это должно было делать? – Xufox

+0

Welp, теперь я чувствую себя глупо. Удаление типа фиксированного кода (конечно). Я изменил его с 'typeof result! == 'undefined' на проверку false и забыл удалить typeof. Благодарю. – Pozzuh

+0

Вам не хватает идентификатора в объекте первой строки? –

ответ

1

Удаление «typeof» в этом операторе if исправляет мой код.

if(typeof result !== false) 
Смежные вопросы