代码之家  ›  专栏  ›  技术社区  ›  Aram Grigoryan

从对象数组中删除[重复]

  •  0
  • Aram Grigoryan  · 技术社区  · 6 年前

    我有很多这样的东西。结果由console.log()显示

    (5) [{…}, {…}, {…}, {…}, {…}]
    0:
      name:"SOMEVALUE"
      partyDetails"SOMEVALUE"
      __proto__:Object
    1:
      name: "SOMEVALUE"
      partyDetails: "SOMEVALUE"
      __proto__:Object
    2:
      name:"SOMEVALUE"
      partyDetails: "SOMEVALUE"
      __proto__: Object
    3:
      name:"SOMEVALUE"
      partyDetails:"SOMEVALUE"
      __proto__: Object
    4:
      name:"SOMEVALUE"
      partyDetails: "SOMEVALUE"
      __proto__:Object
    length:5
    __proto__:Array(0)
    

    通过此命令从对象中删除后,

    delete  $scope.excelInfo.columnDefs[3];
    delete  $scope.excelInfo.columnDefs[4];
    

    我在console.log上找到这个

    (5) [{…}, {…}, {…}, empty × 2]
     0:
       name:"SOMEVALUE"
       partyDetails:"SOMEVALUE"
       __proto__:Object
     1:
       name:"SOMEVALUE"
       partyDetails:"SOMEVALUE"
       __proto__:Object
     2:
       name:"SOMEVALUE"
       partyDetails:"SOMEVALUE"
       __proto__:Object
     length:5
     __proto__:Array(0) 
    

    你怎么看 空2 在删除后的最后一个对象数组中。

    我该怎么做才能删除这两个空行?

    这2个空行使我的数据在视图中出错。

    有什么好的解决办法吗?

    我不想检查数据是否等于空。

    谢谢

    3 回复  |  直到 6 年前
        1
  •  1
  •   Nikhil Aggarwal    6 年前

    使用 Array.splice

    $scope.excelInfo.columnDefs.splice(3,2)
    

    例如

    var arr = [1,2,3,4,5];
    arr.splice(3,2);
    console.log(arr);
        2
  •  2
  •   Ankit Agarwal    6 年前

    你可以使用 splice() 删除最后两个对象而不设置 undefined 当你使用 delete

    var arr = [
      {
        name:"SOMEVALUE1"
      },
      {
        name:"SOMEVALUE2"
      },  
      {
        name:"SOMEVALUE3"
      },  
      {
        name:"SOMEVALUE4"
      },  
      {
        name:"SOMEVALUE5"
      }
    ];
    
    arr.splice(3,2)
    console.log(arr);

    或使用 删除 你只需要过滤定义的对象,

    var arr = [
      {
        name:"SOMEVALUE1"
      },
      {
        name:"SOMEVALUE2"
      },  
      {
        name:"SOMEVALUE3"
      },  
      {
        name:"SOMEVALUE4"
      },  
      {
        name:"SOMEVALUE5"
      }
    ];
    
    delete arr[3];
    delete arr[4];
    var res = arr.filter(item => item);
    console.log(res);
        3
  •  1
  •   Robby Cornelissen    6 年前

    Array.prototype.splice() 数组而不是使用 delete .

    $scope.excelInfo.columnDefs.splice(3, 2);
    //                                 ^  ^
    //                                 |  |
    //                                 |  Number of elements to remove
    //                                 Index at which to start removing
    

    splice() 就地修改数组,因此不需要重新分配它。