代码之家  ›  专栏  ›  技术社区  ›  Yash Jain

使用对象属性[复制]从对象数组中删除对象

  •  0
  • Yash Jain  · 技术社区  · 7 年前

    我的javascript应用程序中有一组对象,看起来像

    var data = [
     {
      id:2467,
      name:'alex',
      grade:'B',
     },
     {
      id:5236,
      name:'bob',
      grade:'A-',
     },
     {
      id:1784,
      name:'carl',
      grade:'C',
     },
     {
      id:5841,
      name:'dave',
      grade:'AA',
     },
     {
      id:3278,
      name:'harry',
      grade:'B+',
     },
    ]
    

    现在我必须根据对象id从这个数组中移除或弹出一个对象,使用一个类似于

    function removeStudent(id){
      //logic for removing object based on object id
    }
    

    应该是

    removeStudent(5236);
    

    之后的数据数组应该是

    var data = [
     {
      id:2467,
      name:'alex',
      grade:'B',
     },
     {
      id:1784,
      name:'carl',
      grade:'C',
     },
     {
      id:5841,
      name:'dave',
      grade:'AA',
     },
     {
      id:3278,
      name:'harry',
      grade:'B+',
     },
    ]
    

    我试着用 pop() 但我认为这将从数组中删除最后一个元素,而不是特定的元素。 我看过这个从数组中删除元素的帖子

    How do I remove a particular element from an array in JavaScript?

    但我在这里没有找到我的答案 需要帮助!

    5 回复  |  直到 7 年前
        1
  •  7
  •   hsz    7 年前

    你可以试试 Array.prototype.filter() 以下内容:

    function removeStudent(data, id) {
      return data.filter(student => student.id !== id);
    }
    

    它将创建一个 复制 输入的 data 阵列。

    const newData = removeStudent(data, 5236);
    
        2
  •  1
  •   Nikhil Aggarwal    7 年前

    使用 Array.findIndex Array.splice

    var data = [ { id:2467, name:'alex', grade:'B', }, { id:5236, name:'bob', grade:'A-', }, { id:1784, name:'carl', grade:'C', }, { id:5841, name:'dave', grade:'AA', }, { id:3278, name:'harry', grade:'B+', }];
    
    function removeStudent(_id){
      var index = data.findIndex(({id}) => id === _id);
      if(index !== -1) data.splice(index,1);
    }
    removeStudent(5236);
    console.log(data);
        3
  •  1
  •   brk    7 年前

    使用数组过滤方法它将返回一个新的匹配元素数组

    var data = [{
        id: 2467,
        name: 'alex',
        grade: 'B',
      },
      {
        id: 5236,
        name: 'bob',
        grade: 'A-',
      },
      {
        id: 1784,
        name: 'carl',
        grade: 'C',
      },
      {
        id: 5841,
        name: 'dave',
        grade: 'AA',
      },
      {
        id: 3278,
        name: 'harry',
        grade: 'B+',
      },
    ]
    
    function removeStudent(id) {
      return data.filter(function(item) {
        return item.id !== id;
      })
    }
    console.log(removeStudent(5236));
        4
  •  0
  •   Mihai Alexandru-Ionut    7 年前

    你必须使用 findIndex 相反,通过 callback 作为 论点

    var data = [ { id:2467, name:'alex', grade:'B', }, { id:5236, name:'bob', grade:'A-', }, { id:1784, name:'carl', grade:'C', }, { id:5841, name:'dave', grade:'AA', }, { id:3278, name:'harry', grade:'B+', }, ]
    let id = 5236;
    data.splice(data.findIndex(p => p.id == id), 1);
    console.log(data);
        5
  •  0
  •   Ankit Agarwal    7 年前

    你可以用 filter() 但请确保将筛选结果重新分配给 data 要覆盖原始值:

    var data = [
     {
      id:2467,
      name:'alex',
      grade:'B',
     },
     {
      id:5236,
      name:'bob',
      grade:'A-',
     },
     {
      id:1784,
      name:'carl',
      grade:'C',
     },
     {
      id:5841,
      name:'dave',
      grade:'AA',
     },
     {
      id:3278,
      name:'harry',
      grade:'B+',
     },
    ];
    
    function removeStudent(data, id){
      return data.filter(student => student.id !== id);
    }
    
    data = removeStudent(data, 5236);
    console.log(data);