我想在多级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;
}
答案 0 :(得分:2)
您从正在迭代的函数(angular.forEach)返回,而不是从findLaoutFieldByID
返回。您可能希望使用常规的for
循环。