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)
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
主要区别在于,使用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)
我用了很多,所以我创建了一个小型原型.如果匹配,只需查找该项目然后将其拉出.
//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.
如果您知道对象在数组中的索引,则可以使用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)
马塞洛