Рекурсивная функция вызывается не на каждой итерации
Я пытаюсь реализовать рекурсивную функцию в JQuery. Вместо того чтобы возвращать серию объектов, рекурсивная функция возвращает только один объект(что заставляет меня предположить, что она выполняет только один рекурсивный вызов).
//recursive function to find every Base Child function GetBaseChild(node) { if(node.hasOwnProperty("children")){ for(var i = 0; i < node.children.length; i++){ return GetBaseChild(node.children[i]); } }else{ return node; } }
Я предполагаю, что возврат в моем падающем цикле останавливает мой цикл от перехода к следующему индексу и делает рекурсивный вызов, следовательно, одиночный вызов. Любая идея, как я могу это сделать.
Что я уже пробовал:
Первоначально я решил неопределенную ошибку из этой функции. Я попытался добавить оператор if внутри цикла for, чтобы проверить, находимся ли мы в конце цикла и возвращаем ли функцию, но все равно это не работает.
//recursive function to find every Base Child function GetBaseChild(node) { if(node.hasOwnProperty("children")){ for(var i = 0; i < node.children.length; i++){ if(i < node.children.length -1){ GetBaseChild(node.children[i]); }else{ return GetBaseChild(node.children[i]); } } }else{ return node; } }
Это возвращает последний элемент моего ожидаемого результата.
Richard Deeming
Что бы вы ни положили после return
ключевое слово-это то, что будет возвращено из вашей функции.
Ваша функция возвращает один результат. А чего вы ожидали от него?
Andrew Blessing Manyore
Я ожидаю, что он вернет около шести объектов из данных, которые у меня есть прямо сейчас. На самом деле я хочу, чтобы он выполнял рекурсивный вызов каждого объекта внутри массива.
Richard Deeming
Итак, вы хотите вернуть массив всех узлов?
Или передать каждый узел функции обратного вызова?
Andrew Blessing Manyore
Это не массив как таковой. Я ожидаю, что он вернет значения, которые я затем добавлю в массив, хотя я использовал подход массива, и он, кажется, работает.
Richard Deeming
Если вы хотите вернуть несколько значений, у вас действительно нет выбора - вы иметь чтобы использовать массив.
Единственной другой альтернативой было бы передать функцию обратного вызова и иметь GetBaseChild
функция вызывает его для каждого узла.
function GetBaseChild(node, callback) { callback(node); if(node.hasOwnProperty("children")) { for(var i = 0; i < node.children.length; i++) { GetBaseChild(node.children[i], callback); } } }
Andrew Blessing Manyore
Спасибо тебе за это. Я уже пробовал массивный подход, и он сработал для меня и его в моем решении.
Andrew Blessing Manyore
А также удаление возврата внутри моего цикла for, returns и объекта' undefined'.