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

我有这样一个JavaScript对象:

id="1"; name = "serdar"; 

我有一个包含上面的许多对象的数组。 我如何从这个数组中删除一个对象,例如:

 obj[1].remove(); 

splice工程:

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

不要在数组上使用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; } 

下面是一个例子。

 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'}] 

您可以使用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"] 

使用splice()方法的示例:

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

如果您有权访问ES2015function,并且您正在寻找更多function的方法,则可以使用以下方法:

 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' } // [ 

注意,虽然filter()是非变异的,所以你会得到一个新的数组。

查看关于filter的Mozilla开发者networking笔记 。

我使用这个相当多,所以我创build了一个小原型。 只要find该项目,然后将其拉出来,如果有匹配。

 //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; } 

可以这样调用:

 var arr = [12, 34, 56]; arr.remove(34); 

结果是[12,56]

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

如果你知道对象在数组中的索引,那么你可以使用splice(),就像其他人所说的那样:

 var removedObject = myArray.splice(index,1); removedObject = null; 

如果你不知道索引,那么你需要search它的数组,即:

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

马塞洛

  //KISS method //(the setup/comments is/are longer than the code) //cards is a two dimensional array object // has an array object with 4 elements at each first dimensional index //var cards = new Array() //cards[cards.length] = new Array(name, colors, cost, type) //Can be constructed with Associated arrays, modify code as needed. //my test array has 60 'cards' in it // 15 'cards' repeated 4 times each // groups were not sorted prior to execution // (I had 4 groups starting with 'U' before the first 'A') //Should work with any dimensionality as long as first //index controls sort order //sort and remove duplicates //Algorithm: // While same name side by side, remove higher entry; // assumes 'cards' with same name have same other data // (otherwise use cards[i-1] === cards[i] to compare array objects). //Tested on IE9 and FireFox (multiple version #s from 31 up). //Also tested by importing array data from 5MB text file. //Quick execution cards.sort() for (i=1; i<cards.length-1; i++){ while (cards[i-1][0] == cards[i][0]){ cards.splice(i,1) } } 

使用拼接方法。

(至less我认为这是答案,你说你有一个对象 ,但你给的代码只是创build了两个variables,并没有如何创build数组的迹象)

使用delete-keyword。

 delete obj[1]; 

编辑:请参阅: 删除JavaScript中的数组元素 – 删除与拼接删除将取消定义偏移量,但不完全删除条目。 拼接会像大卫说的那样正确。

 delete obj[1]; 

请注意,这不会更改数组索引。 您删除的任何数组成员将保持为包含undefined “插槽”。

 var arr = [{id:1,name:'serdar'}, {id:2,name:'alfalfa'},{id:3,name:'joe'}]; var ind = arr.findIndex(function(element){ return element.id===2; }) if(ind!==-1){ arr.splice(ind, 1) } console.log (arr) 

如果它是数组中的最后一项,则可以执行obj.pop()