使用对象属性从对象数组中删除对象

时间:2018-07-19 07:08:39

标签: javascript arrays

我的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 个答案:

答案 0 :(得分:7)

您可以尝试使用Array.prototype.filter()

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

它将为输入data数组创建一个副本

const newData = removeStudent(data, 5236);

答案 1 :(得分:1)

使用Array.findIndexArray.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);

答案 2 :(得分:1)

使用数组过滤器方法。它将返回一个匹配元素的新数组。在您的情况下,您需要返回所有id都不是在参数中传递的对象的对象

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));

答案 3 :(得分:0)

您必须使用findIndex,方法是将callback函数作为 argument

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);

答案 4 :(得分:0)

您可以使用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);,以覆盖原始值:

{{1}}