如何在javascript中调用递归函数
在我的如何在javascript中调用递归函数,javascript,angularjs,json,Javascript,Angularjs,Json,在我的组件列表中将有多个对象 if ($scope.componentList && $scope.componentList.length > 0) { angular.forEach($scope.componentList, function(admincomp, index) { $scope.validateAdmincomp(admincomp, index); }); } $scope.validateA
组件列表中
将有多个对象
if ($scope.componentList && $scope.componentList.length > 0) {
angular.forEach($scope.componentList, function(admincomp, index) {
$scope.validateAdmincomp(admincomp, index);
});
}
$scope.validateAdmincomp = function(admincomp, index) {
for (var key in admincomp) {
if (key !== "$$hashKey" && admincomp.hasOwnProperty(key)) {
angular.element(document.querySelector('#' + key + index)).removeClass("errorhilight");
}
}
if (admincomp.componentName == undefined || admincomp.componentName == "") {
angular.element(document.querySelector('#componentName' + index)).addClass("errorhilight");
isValidData = false;
}
};
$scope.componentList
格式如下
[
{
"revision": 0,
"componentName": "abc",
"componentIdentification": "abc",
"componentType": "1",
"componentState": "1",
"componentUrl": null,
"componentId": "214",
"rowId": "3",
"items": [
{
"revision": 0,
"componentName": "efg",
"componentIdentification": "efg",
"componentType": "2",
"componentState": "1",
"componentUrl": null,
"componentId": "215",
"rowId": "3.1",
"items": null,
"componentStateId": 0,
"ctastatus": 0,
"actionId": "16",
"actionToPerform": "1"
}
],
"componentStateId": 0,
"ctastatus": 0,
"actionId": "37",
"actionToPerform": "1"
},
{
"revision": 0,
"componentName": "hij",
"componentIdentification": "hij",
"componentType": "1",
"componentState": "1",
"componentUrl": null,
"componentId": "206",
"rowId": "1",
"items": [
{
"revision": 0,
"componentName": "klm",
"componentIdentification": "klm",
"componentType": "2",
"componentState": "1",
"componentUrl": null,
"componentId": "207",
"rowId": "1.1",
"items": [
{
"revision": 0,
"componentName": "nop",
"componentIdentification": "nop",
"componentType": "2",
"componentState": "1",
"componentUrl": null,
"componentId": "208",
"rowId": "1.1.1",
"items": [
{
"revision": 0,
"componentName": "qrs",
"componentIdentification": "qrs",
"componentType": "2",
"componentState": "1",
"componentUrl": null,
"componentId": "209",
"rowId": "1.1.1.1",
"items": null,
"componentStateId": 0,
"ctastatus": 0,
"actionId": "26",
"actionToPerform": "1"
},
{
"revision": 0,
"componentName": "tuv",
"componentIdentification": "tuv",
"componentType": "2",
"componentState": "1",
"componentUrl": null,
"componentId": "210",
"rowId": "1.1.1.2",
"items": null,
"componentStateId": 0,
"ctastatus": 0,
"actionId": "5",
"actionToPerform": "1"
}
],
"componentStateId": 0,
"ctastatus": 0,
"actionId": "25",
"actionToPerform": "1"
}
],
"componentStateId": 0,
"ctastatus": 0,
"actionId": "1",
"actionToPerform": "1"
}
],
"componentStateId": 0,
"ctastatus": 0,
"actionId": "37",
"actionToPerform": "1"
},
{
"revision": 0,
"componentName": "wxy",
"componentIdentification": "wxy",
"componentType": "1",
"componentState": "1",
"componentUrl": null,
"componentId": "211",
"rowId": "2",
"items": [
{
"revision": 0,
"componentName": "zab",
"componentIdentification": "zab",
"componentType": "2",
"componentState": "1",
"componentUrl": null,
"componentId": "212",
"rowId": "2.1",
"items": null,
"componentStateId": 0,
"ctastatus": 0,
"actionId": "7",
"actionToPerform": "1"
},
{
"revision": 0,
"componentName": "cde",
"componentIdentification": "cde",
"componentType": "2",
"componentState": "1",
"componentUrl": null,
"componentId": "213",
"rowId": "2.2",
"items": null,
"componentStateId": 0,
"ctastatus": 0,
"actionId": "12",
"actionToPerform": "1"
}
],
"componentStateId": 0,
"ctastatus": 0,
"actionId": "37",
"actionToPerform": "1"
}
]
在上面的代码中,父级仅在forEach循环只考虑$scope.componentList
列表而不考虑内部项[]
列表时进行验证。我想为每个对象调用validateAdmincomp
函数。
如何调用每个对象的
validateAdmincomp
函数。使用以下代码。将迭代逻辑移动到方法(递归方法)
使用下面的代码。将迭代逻辑移动到方法(递归方法)
我不确定你是否在找这个。它将迭代每个键,如果它是一个对象而不是null,它将使用该对象调用函数
var列表=[
{
“修订”:0,
“组件名称”:“abc”,
“组件标识”:“abc”,
“组件类型”:“1”,
“组件状态”:“1”,
“componentUrl”:空,
“componentId”:“214”,
“rowId”:“3”,
“项目”:[
{
“修订”:0,
“组件名称”:“efg”,
“组件标识”:“efg”,
“组件类型”:“2”,
“组件状态”:“1”,
“componentUrl”:空,
“componentId”:“215”,
“rowId”:“3.1”,
“项目”:空,
“componentStateId”:0,
“状态”:0,
“actionId”:“16”,
“actionToPerform”:“1”
}
],
“componentStateId”:0,
“状态”:0,
“actionId”:“37”,
“actionToPerform”:“1”
},
{
“修订”:0,
“组件名称”:“hij”,
“组件标识”:“hij”,
“组件类型”:“1”,
“组件状态”:“1”,
“componentUrl”:空,
“componentId”:“206”,
“rowId”:“1”,
“项目”:[
{
“修订”:0,
“组件名称”:“klm”,
“组件标识”:“klm”,
“组件类型”:“2”,
“组件状态”:“1”,
“componentUrl”:空,
“componentId”:“207”,
“rowId”:“1.1”,
“项目”:[
{
“修订”:0,
“组件名称”:“nop”,
“组件标识”:“nop”,
“组件类型”:“2”,
“组件状态”:“1”,
“componentUrl”:空,
“componentId”:“208”,
“rowId”:“1.1.1”,
“项目”:[
{
“修订”:0,
“组件名称”:“qrs”,
“成分识别”:“qrs”,
“组件类型”:“2”,
“组件状态”:“1”,
“componentUrl”:空,
“componentide”:“209”,
“rowId”:“1.1.1.1”,
“项目”:空,
“componentStateId”:0,
“状态”:0,
“actionId”:“26”,
“actionToPerform”:“1”
},
{
“修订”:0,
“组件名称”:“tuv”,
“组件标识”:“tuv”,
“组件类型”:“2”,
“组件状态”:“1”,
“componentUrl”:空,
“componentId”:“210”,
“rowId”:“1.1.1.2”,
“项目”:空,
“componentStateId”:0,
“状态”:0,
“actionId”:“5”,
“actionToPerform”:“1”
}
],
“componentStateId”:0,
“状态”:0,
“actionId”:“25”,
“actionToPerform”:“1”
}
],
“componentStateId”:0,
“状态”:0,
“actionId”:“1”,
“actionToPerform”:“1”
}
],
“componentStateId”:0,
“状态”:0,
“actionId”:“37”,
“actionToPerform”:“1”
},
{
“修订”:0,
“组件名称”:“wxy”,
“组件标识”:“wxy”,
“组件类型”:“1”,
“组件状态”:“1”,
“componentUrl”:空,
“组件化”:“211”,
“rowId”:“2”,
“项目”:[
{
“修订”:0,
“组件名称”:“zab”,
“组件标识”:“zab”,
“组件类型”:“2”,
“组件状态”:“1”,
“componentUrl”:空,
“componentId”:“212”,
“rowId”:“2.1”,
“项目”:空,
“componentStateId”:0,
“状态”:0,
“actionId”:“7”,
“actionToPerform”:“1”
},
{
“修订”:0,
“组件名称”:“cde”,
“组件标识”:“cde”,
“组件类型”:“2”,
“组件状态”:“1”,
“componentUrl”:空,
“componentId”:“213”,
“rowId”:“2.2”,
“项目”:空,
“componentStateId”:0,
“状态”:0,
“actionId”:“12”,
“actionToPerform”:“1”
}
],
“componentStateId”:0,
“状态”:0,
“actionId”:“37”,
“actionToPerform”:“1”
}
]
功能记录(obj){
用于(输入obj){
if(对象[键]=“对象”&&obj[键]的类型){
控制台日志(键);
rec(obj[键]);
}
}
}
list.forEach(函数(o){
rec(o);
})
我不确定您是否在找这个。它将迭代每个键,如果它是一个对象而不是null,它将使用该对象调用函数
var列表=[
{
“修订”:0,
“组件名称”:“abc”,
“组件标识”:“abc”,
“组件类型”:“1”,
“组件状态”:“1”,
“componentUrl”:空,
“componentId”:“214”,
“rowId”:“3”,
“项目”:[
{
“修订”:0,
“组件名称”:“efg”,
“组件标识”:“efg”,
“组件类型”:“2”,
“组件状态”:“1”,
“componentUrl”:空,
“componentId”:“215”,
“rowId”:“3.1”,
“项目”:空,
“componentStateId”:0,
“状态”:0,
“actionId”:“16”,
“actionToPerform”:“1”
}
],
“componentStateId”:0,
“c
if ($scope.componentList && $scope.componentList.length > 0) {
validateList($scope.componentList) // starting point to iterate and validate the list
}
var validateList = function(list) {
angular.forEach(list, function(admincomp, index) {
$scope.validateAdmincomp(admincomp, index); // considering this method is doing some other validations
if (admincomp.items && admincomp.items.lenght > 0)
validateList(admincomp.items); // method calling itself
});
}