2017-11-09 3 views
0

In meinem eckigen habe ich eine $ Scope-Variable wie unten.Angular.js wie in JSON-Array nach gegebenem Pfad zu suchen

$scope.roleList2 = [ 
     { "roleName" : "User", "roleId" : "role1", "children" : [ 
      { "roleName" : "subUser1", "roleId" : "role11", "collapsed" : true, "children" : [] }, 
      { "roleName" : "subUser2", "roleId" : "role12", "collapsed" : true, "children" : [ 
      { "roleName" : "subUser2-1", "roleId" : "role121", "children" : [ 
       { "roleName" : "subUser2-1-1", "roleId" : "role1211", "children" : [] }, 
       { "roleName" : "subUser2-1-2", "roleId" : "role1212", "children" : [] } 
      ]} 
      ]} 
     ]}, 

     { "roleName" : "Admin", "roleId" : "role2", "children" : [ 
      { "roleName" : "subAdmin1", "roleId" : "role11", "collapsed" : true, "children" : [] }, 
      { "roleName" : "subAdmin2", "roleId" : "role12", "children" : [ 
      { "roleName" : "subAdmin2-1", "roleId" : "role121", "children" : [ 
       { "roleName" : "subAdmin2-1-1", "roleId" : "role1211", "children" : [] }, 
       { "roleName" : "subAdmin2-1-2", "roleId" : "role1212", "children" : [] } 
      ]} 
      ]} 
     ]}, 

     { "roleName" : "Guest", "roleId" : "role3", "children" : [ 
      { "roleName" : "subGuest1", "roleId" : "role11", "children" : [] }, 
      { "roleName" : "subGuest2", "roleId" : "role12", "collapsed" : true, "children" : [ 
      { "roleName" : "Banned Area", "roleId" : "role121", "children" : [ 
       { "roleName" : "subGuest2-1-1", "roleId" : "role1211", "Parent":"Banned Area" ,"children" : [] }, 
       { "roleName" : "subGuest2-1-2", "roleId" : "role1212", "Parent":"Banned Area", "children" : [] } 
      ]} 
      ]} 
     ]} 
     ]; 

Ich möchte zunächst gegebenen Pfad Array finden

Admin>subAdmin2-1 

und legen

{ "roleName" : "subAdmin2-1-3", "roleId" : "role1213", "children" : [] } 

Bitte leiten, wie dies erreicht werden kann.

+0

Sie sollten auch zu schreiben versuchen, was Code, den Sie zuerst versucht haben, bevor jemand fragt es für Sie zu lösen – faboolous

+0

Ehrlich gesagt, ich hatte keine Ahnung, wo ich anfangen soll. – sand

+1

Kann dies mit einer rekursiven Funktion tun, die 'Array # find()' verwendet. Was ist das erwartete Ergebnis? Das Objekt, seine Eltern, sein Index usw.? – charlietfl

Antwort

0

Dies ist schnell und schmutzig, aber funktioniert:

for (var i=0; i<$scope.roleList2.length; i++) { 
    if ($scope.roleList2[i].roleName == "Admin") { 
    var subRoles = $scope.roleList2[i].children; 
    for (var k=0; k<subRoles.length; k++) { 
     if (subRoles[k].roleName == "subAdmin2") { 
     var subSubRoles = subRoles[k].children; 
     for (var j=0; j<subSubRoles.length; j++) { 
      if (subSubRoles[j].roleName == "subAdmin2-1") { 
      subSubRoles[j].children.push({ "roleName" : "subAdmin2-1-3", "roleId" : "role1213", "children" : [] }); 
      console.log(subSubRoles[j]); 
      } 
     } 
     } 
    } 
    } 
} 

Sie können versuchen, mit einer Rekursion zu verbessern. Und Sie wollen wahrscheinlich diese in einer Funktion sein, so können Sie anrufen

var role = "{ "roleName" : "subAdmin2-1-3", "roleId" : "role1213", "children" : [] }"; 
$scope.addSubRole(role, "Admin", "subAdmin2-1") 
+0

Danke @faboolous. Ich werde das versuchen und die Antwort akzeptieren, wenn es funktioniert. – sand