Угловой рекурсивный метод не возвращает значение

0

Я хочу найти элемент с некоторым id в многоуровневом json-объекте. Я использую рекурсию с angular.forEach методом. Но метод возвращает мне undefined несмотря на это return value;.

вот метод:

    function findLaoutFieldByID(array, search) {
        if (!array || !search) {
            return null;
        }
        angular.forEach(array, function(value, key) {
            if (value.id == search) {
                return value;
            }
            return findLaoutFieldByID(value.items, search);
        });
    }

Может, кто-нибудь скажет мне, почему?

EDIT: Возможно, кто-то может предложить, как найти объект с id=rc2 в этом массиве, попробовал рекурсию, но не повезло.

        $scope.containerLayout = [ {
        id : 'root',
        size : '100%',
        direction : 'row',
        items : [ {
            id : 'rc1',
            size : '50%',
            direction : 'col',
            items : [ {
                id : 'rc11',
                size : '40%'
            }, {
                id : 'rc12',
                size : '40%'
            }, {
                id : 'rc13',
                size : '20%'
            } ]
        }, {
            id : 'rc2',
            size : '50%'
        } ]
    } ];

Я нашел какое-то решение, не уверен, что это лучше, но кому-то еще нужно:

        function findLaoutFieldByID(array, search) {
        if (!array || !search) {
            return null;
        }

        for (var i = 0; i < array.length; i++) {
            if (array[i].id == search) {
                return array[i];
            }
            var returns = 0;
            if (array[i].items) {
                while (returns != array[i].items.length) {
                    var val = findLaoutFieldByID(array[i].items, search);
                    if (val == null) {
                        returns++;
                    } else {
                        return val;
                    }
                }
            }
        }
        return null;
    }
  • 2
    Вы возвращаетесь из функции итерации, а не из findLaoutFieldByID .
Теги:
recursion

1 ответ

2

Вы возвращаетесь от функции, которая выполняет итерацию (угловая.forEach), а не из findLaoutFieldByID. Вы можете использовать обычный for цикла.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню