【问题标题】:angular : delete some properties in obj with angularangular : 用 angular 删除 obj 中的一些属性
【发布时间】:2017-02-27 10:07:58
【问题描述】:

这是我的数据:

$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:[]}
      ]
    }

这是我的删除功能:

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中找到指定的id

我执行这个函数后deleteNode($scope.datas,5)

它确实找到了正确的 obj,但是 $scope.datas 没有改变,为什么?

找到答案了,我把deleteNode函数改成自爆

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)

【问题讨论】:

    标签: javascript angularjs foreach


    【解决方案1】:

    在对它进行更改后尝试返回对象,即

    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)
    

    【讨论】:

    • github copilot 向我建议了一个指向这个答案的链接,指向一些完全不相关的东西,哈哈
    【解决方案2】:

    尝试使用

    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)
    

    【讨论】:

      猜你喜欢
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 2018-11-18
      相关资源
      最近更新 更多