Angular recusive方法不返回值

时间:2015-09-23 18:20:58

标签: javascript angularjs recursion

我想在多级json对象中找到带有id的元素。 我使用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);
        });
    }

也许有人可以告诉我为什么?

编辑: 也许有人可以建议如何在这个数组中找到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;
    }

1 个答案:

答案 0 :(得分:2)

您从正在迭代的函数(angular.forEach)返回,而不是从findLaoutFieldByID返回。您可能希望使用常规的for循环。