я получил следующую функцию, что я пишу на заводе, так что я могу использовать его позже:не может сделать это (простая) рекурсивная функция возвращает значение
treeView.factory('utils', function() {
return{
// Util for finding an object by its 'id' property among an array
findById:function findById(a, targetId)
{
var indexResult = 0;
for (var i = 0; i < a.length; i++)
{
//console.log(targetId + " - " +a[i].id);
if (a[i].id === targetId)
{
indexResult = i+1;
console.log(a[indexResult-1]);
break;
}
else
{
if(a[i].nodes instanceof Array)
{
return findById(a[i].nodes, targetId);
}
}
}
if(indexResult == 0)
{
}
else
{
return a[indexResult-1];
}
}
};
});
Затем в моем контроллере я называю это так :
$scope.elementToEdit = utils.findById($scope.data,$stateParams.elementId);
console.log($scope.elementToEdit)
и мои консольные журналы «найдены», но возврат «не определен»!
Я не называю фабрику неправильным способом? Это не похоже, потому что я написал его вне углового, и это то же самое. Или это слишком поздно, и я не вижу очевидного?
Редактировать: на самом деле вопрос не имеет ничего общего с угловым. Мой набор данных - это не простой массив, а массив массива, каждый массив содержит его дочерние элементы. Я считаю, что функция работает неправильно, потому что даже когда функции обнаруживают правильные элементы, она продолжает работать на другом массиве той же глубины. Я мог бы сделать трюк с глобальной переменной. Но не так ли?
найти скрипку здесь http://jsfiddle.net/Morgorth/7njyuzxc/
окончательное редактирование: моя ошибка в том, что в JS, когда вы рекурсивную функцию, которую необходимо вызвать его с возвращением, как это: вернуть findById (а [I] .nodes , targetId);
спасибо, что я этого не знал. Я обновил свой код: я все равно получаю только 1, хотя успех заносится в консоль. Это не моя ночь. – Eagle1
@ Eagle1 Вы изменили свой код, чтобы он выглядел как мой? Код, который я опубликовал, должен работать из коробки :) – DividedByZero
да, я посмотрел на него, все одно и то же, но имя переменной – Eagle1