2017-02-27 19 views
0

でOBJでいくつかのプロパティを削除するには、私のデータです:角度:ここ角度

$scope.datas = { 
     "name": "000", 
     "id" : 1, 
     "type" : "record" 
     "children": [ 
     {name:111,id:2,children:[ 
      {name:444,id:5,children:[]} 
     ]} 
     {name:222,id:3,children:[]} 
     {name:333,id:4,children:[]} 
     ] 
    } 

、これは私の削除機能である:私は指定されたIDを見つける必要がある

deleteNode = (node,id) -> 
    if node.id == id 
     $timeout -> 
     console.log 'findNode',node 
     node = null 
     return 
    if node.children 
     for rows,i in node.children 
     if rows.id == id 
      $timeout -> 
      console.log 'findNode',rows 
      rows = null 
     else 
      deleteNode(rows,id) 

私の$scope.datas

この機能を実行した後deleteNode($scope.datas,5)

実際に正しいオブジェクトが見つかりましたが、$scope.datasは変更されません。なぜですか?答えを見つけ

、私は

deleteNode = (node,id) -> 
    if node.id == id 
     $timeout -> 
     node = {} 
     return 
    if node.children 
     for rows,i in node.children 
     if rows.id == id 
      node.children.splice(i,1) 
      return 
     else 
      deleteNode(rows,id) 

答えて

0

を吹いたためにdeleteNode機能を変更するには、すなわち、それへの変更

deleteNode = (node,id) -> 
    if node.id == id 
     $timeout -> 
     console.log 'findNode',node 
     node = null 
     // return the node 
     return node; 
    if node.children 
     for rows,i in node.children 
     if rows.id == id 
      $timeout -> 
      console.log 'findNode',rows 
      rows = null 
      // return the node 
      return node; 
     else 
      deleteNode(rows,id) 
0

を使用しようと行った後、オブジェクトを返す試してみてください
deleteNode = (node,id) -> 
if node.id == id 
    $timeout -> 
    console.log 'findNode',node 
    node = null 
    $timeout(angular.noop) 
    return 
if node.children 
    for rows,i in node.children 
    if rows.id == id 
     $timeout -> 
     console.log 'findNode',rows 
     rows = null 
     $timeout(angular.noop) 
    else 
     deleteNode(rows,id)