如何使用JavaScript从数组中删除对象?

mav*_*era 55 javascript arrays object

我有一个像这样的JavaScript对象:

id="1";
name = "serdar";
Run Code Online (Sandbox Code Playgroud)

我有一个包含上面许多对象的数组.如何从该数组中删除对象,如下所示:

obj[1].remove();
Run Code Online (Sandbox Code Playgroud)

BGe*_*sen 153

splice工作:

var arr = [{id:1,name:'serdar'}];
arr.splice(0,1);
// []
Run Code Online (Sandbox Code Playgroud)

不要delete在数组上使用运算符.

但也许你想要这样的东西?

var removeByAttr = function(arr, attr, value){
    var i = arr.length;
    while(i--){
       if( arr[i] 
           && arr[i].hasOwnProperty(attr) 
           && (arguments.length > 2 && arr[i][attr] === value ) ){ 

           arr.splice(i,1);

       }
    }
    return arr;
}
Run Code Online (Sandbox Code Playgroud)

以下是一个例子.

var arr = [{id:1,name:'serdar'}, {id:2,name:'alfalfa'},{id:3,name:'joe'}];
removeByAttr(arr, 'id', 1);   
// [{id:2,name:'alfalfa'}, {id:3,name:'joe'}]

removeByAttr(arr, 'name', 'joe');
// [{id:2,name:'alfalfa'}]
Run Code Online (Sandbox Code Playgroud)

  • 如果可以,我会给你+10:D (7认同)
  • 我知道此评论会在一段时间后出现...但是此功能非常出色,我必须在应归功的地方给予好评!!!谢谢。 (2认同)
  • 太好了,正是我需要的,+ 10冠军。XD (2认同)

Ben*_*itt 55

如果您可以访问ES2015功能,并且您正在寻找更具功能性的方法,我会选择以下内容:

const people = [
  { id: 1, name: 'serdar' },
  { id: 5, name: 'alex' },
  { id: 300, name: 'brittany' }
];

const idToRemove = 5;

const filteredPeople = people.filter((item) => item.id !== idToRemove);

// [
//   { id: 1, name: 'serdar' },
//   { id: 300, name: 'brittany' }
// [
Run Code Online (Sandbox Code Playgroud)

当然要小心,不要filter()变异,所以你会得到一个新阵列.

请参阅有关Filter的Mozilla Developer Network说明.


aji*_*jin 29

最干净和最快的方式(ES6)

const apps = [
  {id:1, name:'Jon'}, 
  {id:2, name:'Dave'},
  {id:3, name:'Joe'}
]

//remove item with id=2
const itemToBeRemoved = {id:2, name:'Dave'}

apps.splice(apps.findIndex(a => a.id === itemToBeRemoved.id) , 1)

//print result
console.log(apps)
Run Code Online (Sandbox Code Playgroud)

更新:如果查找数组中不存在任何机会项目,请使用以下解决方案,根据 MaxZoom 的评论进行更新

const apps = [
  {id:1, name:'Jon'}, 
  {id:3, name:'Joe'}
]

//remove item with id=2
const itemToBeRemoved = {id:2, name:'Dave'}

const findIndex = apps.findIndex(a => a.id === itemToBeRemoved.id)

findIndex !== -1 && apps.splice(findIndex , 1)

//print result
console.log(apps)
Run Code Online (Sandbox Code Playgroud)


Dan*_*llo 23

您可以使用splice()方法或delete运算符.

主要区别在于,使用delete运算符删除数组元素时,即使删除数组的最后一个元素,数组的长度也不会受到影响.另一方面,该splice()方法移动所有元素,使得在删除元素的位置没有留下孔.

使用delete运算符的示例:

var trees = ["redwood", "bay", "cedar", "oak", "maple"];  
delete trees[3];  
if (3 in trees) {  
   // this does not get executed  
}
console.log(trees.length);  //  5
console.log(trees);         //  ["redwood", "bay", "cedar", undefined, "maple"]
Run Code Online (Sandbox Code Playgroud)

使用splice()方法的示例:

var trees = ["redwood", "bay", "cedar", "oak", "maple"];  
trees.splice(3, 1);
console.log(trees.length);  //  4
console.log(trees);         //  ["redwood", "bay", "cedar", "maple"]
Run Code Online (Sandbox Code Playgroud)


Six*_*oot 9

我用了很多,所以我创建了一个小型原型.如果匹配,只需查找该项目然后将其拉出.

//Prototype to remove object from array, removes first
//matching object only
Array.prototype.remove = function (v) {
    if (this.indexOf(v) != -1) {
        this.splice(this.indexOf(v), 1);
        return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

可以这样称呼:

var arr = [12, 34, 56];
arr.remove(34);
Run Code Online (Sandbox Code Playgroud)

结果将是[12,56]

如果成功删除则有布尔返回,如果元素不存在则返回false.


Mar*_*elo 5

如果您知道对象在数组中的索引,则可以使用splice(),就像其他人提到的那样,即:

var removedObject = myArray.splice(index,1);
removedObject = null;
Run Code Online (Sandbox Code Playgroud)

如果您不知道索引,则需要在数组中搜索它,即:

for (var n = 0 ; n < myArray.length ; n++) {
    if (myArray[n].name == 'serdar') {
      var removedObject = myArray.splice(n,1);
      removedObject = null;
      break;
    }
}
Run Code Online (Sandbox Code Playgroud)

马塞洛