# Remove Object from Array using JavaScript

## The Question :

605 people think this question is useful

How can I remove an object from an array? I wish to remove the object that includes name Kristian from someArray. For example:

someArray = [{name:"Kristian", lines:"2,5,10"},
{name:"John", lines:"1,19,26,96"}];



I want to achieve:

someArray = [{name:"John", lines:"1,19,26,96"}];


• possible duplicate of How do I remove an object from an array with JavaScript?
• FYI I have rolled back the edit on this question so the array syntax is wrong again, and all of these answers are in context.
• And then the array syntax was “corrected” (twice) again, so that the answers are no longer in context.
• How does the syntax error help make some answers make sense?
• @SamyBencherif – Some of the answers explicitly address the syntax error in the original version of the question, so if you remove that syntax error those answers are now talking about something that doesn’t exist.

846 people think this answer is useful

You can use several methods to remove item(s) from an Array:

//1
someArray.shift(); // first element removed
//2
someArray = someArray.slice(1); // first element removed
//3
someArray.splice(0, 1); // first element removed
//4
someArray.pop(); // last element removed
//5
someArray = someArray.slice(0, a.length - 1); // last element removed
//6
someArray.length = someArray.length - 1; // last element removed



If you want to remove element at position x, use:

someArray.splice(x, 1);



Or

someArray = someArray.slice(0, x).concat(someArray.slice(-x));



Reply to the comment of @chill182: you can remove one or more elements from an array using Array.filter, or Array.splice combined with Array.findIndex (see MDN), e.g.

// non destructive filter > noJohn = John removed, but someArray will not change
let someArray = getArray();
let noJohn = someArray.filter( el => el.name !== "John" );
log("non destructive filter > noJohn = ", format(noJohn));
log(**someArray.length ${someArray.length}); // destructive filter/reassign John removed > someArray2 = let someArray2 = getArray(); someArray2 = someArray2.filter( el => el.name !== "John" ); log("", "destructive filter/reassign John removed > someArray2 =", format(someArray2)); log(**someArray2.length${someArray2.length});

// destructive splice /w findIndex Brian remains > someArray3 =
let someArray3 = getArray();
someArray3.splice(someArray3.findIndex(v => v.name === "Kristian"), 1);
someArray3.splice(someArray3.findIndex(v => v.name === "John"), 1);
log("", "destructive splice /w findIndex Brian remains > someArray3 =",
format(someArray3));
log(**someArray3.length ${someArray3.length}); // Note: if you're not sure about the contents of your array, // you should check the results of findIndex first let someArray4 = getArray(); const indx = someArray4.findIndex(v => v.name === "Michael"); someArray4.splice(indx, indx >= 0 ? 1 : 0); log("", "check findIndex result first > someArray4 (nothing is removed) > ", format(someArray4)); log(**someArray4.length (should still be 3)${someArray4.length});

function format(obj) {
return JSON.stringify(obj, null, " ");
}

function log(...txt) {
document.querySelector("pre").textContent += ${txt.join("\n")}\n } function getArray() { return [ {name: "Kristian", lines: "2,5,10"}, {name: "John", lines: "1,19,26,96"}, {name: "Brian", lines: "3,9,62,36"} ]; }  <pre> **Results** </pre>  ## The Answer 2 180 people think this answer is useful The clean solution would be to use Array.filter: var filtered = someArray.filter(function(el) { return el.Name != "Kristian"; });  The problem with this is that it does not work on IE < 9. However, you can include code from a Javascript library (e.g. underscore.js) that implements this for any browser. ## The Answer 3 134 people think this answer is useful I recommend using lodash.js or sugar.js for common tasks like this: // lodash.js someArray = _.reject(someArray, function(el) { return el.Name === "Kristian"; }); // sugar.js someArray.remove(function(el) { return el.Name === "Kristian"; });  in most projects, having a set of helper methods that is provided by libraries like these is quite useful. ## The Answer 4 94 people think this answer is useful How about this? $.each(someArray, function(i){
if(someArray[i].name === 'Kristian') {
someArray.splice(i,1);
return false;
}
});



75 people think this answer is useful

Your “array” as shown is invalid JavaScript syntax. Curly brackets {} are for objects with property name/value pairs, but square brackets [] are for arrays – like so:

someArray = [{name:"Kristian", lines:"2,5,10"}, {name:"John", lines:"1,19,26,96"}];



In that case, you can use the .splice() method to remove an item. To remove the first item (index 0), say:

someArray.splice(0,1);

// someArray = [{name:"John", lines:"1,19,26,96"}];



If you don’t know the index but want to search through the array to find the item with name “Kristian” to remove you could to this:

for (var i =0; i < someArray.length; i++)
if (someArray[i].name === "Kristian") {
someArray.splice(i,1);
break;
}



EDIT: I just noticed your question is tagged with “jQuery”, so you could try the $.grep() method: someArray =$.grep(someArray,
function(o,i) { return o.name === "Kristian"; },
true);



73 people think this answer is useful

ES2015

let someArray = [
{name:"Kristian", lines:"2,5,10"},
{name:"John", lines:"1,19,26,96"},
{name:"Kristian", lines:"2,58,160"},
{name:"Felix", lines:"1,19,26,96"}
];

someArray = someArray.filter(person => person.name != 'John');



It will remove John!

51 people think this answer is useful

You could use array.filter().

e.g.

        someArray = [{name:"Kristian", lines:"2,5,10"},
{name:"John", lines:"1,19,26,96"}];

someArray = someArray.filter(function(returnableObjects){
return returnableObjects.name !== 'Kristian';
});

//someArray will now be = [{name:"John", lines:"1,19,26,96"}];



Arrow functions:

someArray = someArray.filter(x => x.name !== 'Kristian')



20 people think this answer is useful

I have made a dynamic function takes the objects Array, Key and value and returns the same array after removing the desired object:

function removeFunction (myObjects,prop,valu)
{
return myObjects.filter(function (val) {
return val[prop] !== valu;
});

}



Full Example: DEMO

var obj = {
"results": [
{
"id": "460",
"name": "Widget 1",
"loc": "Shed"
}, {
"id": "461",
"name": "Widget 2",
"loc": "Kitchen"
}, {
"id": "462",
"name": "Widget 3",
"loc": "bath"
}
]
};

function removeFunction (myObjects,prop,valu)
{
return myObjects.filter(function (val) {
return val[prop] !== valu;
});

}

console.log(removeFunction(obj.results,"id","460"));



16 people think this answer is useful

This is a function that works for me:

function removeFromArray(array, value) {
var idx = array.indexOf(value);
if (idx !== -1) {
array.splice(idx, 1);
}
return array;
}



12 people think this answer is useful

You could also try doing something like this:

var myArray = [{'name': 'test'}, {'name':'test2'}];
var myObject = {'name': 'test'};
myArray.splice(myArray.indexOf(myObject),1);



11 people think this answer is useful
someArray = jQuery.grep(someArray , function (value) {
return value.name != 'Kristian';
});



10 people think this answer is useful

Use splice function on arrays. Specify the position of the start element and the length of the subsequence you want to remove.

someArray.splice(pos, 1);



9 people think this answer is useful

Vote for the UndercoreJS for simple work with arrays.

_.without() function helps to remove an element:

 _.without([1, 2, 1, 0, 3, 1, 4], 0, 1);
=> [2, 3, 4]



5 people think this answer is useful

With ES 6 arrow function

let someArray = [
{name:"Kristian", lines:"2,5,10"},
{name:"John", lines:"1,19,26,96"}
];
let arrayToRemove={name:"Kristian", lines:"2,5,10"};
someArray=someArray.filter((e)=>e.name !=arrayToRemove.name &amp;&amp; e.lines!= arrayToRemove.lines)



3 people think this answer is useful

Simplest solution would be to create a map that stores the indexes for each object by name, like this:

//adding to array
var newPerson = {name:"Kristian", lines:"2,5,10"}
someMap[ newPerson.name ] = someArray.length;
someArray.push( newPerson );

//deleting from the array
var index = someMap[ 'Kristian' ];
someArray.splice( index, 1 );



3 people think this answer is useful

Although this is probably not that appropriate for this situation I found out the other day that you can also use the delete keyword to remove an item from an array if you don’t need to alter the size of the array e.g.

var myArray = [1,2,3];

delete myArray[1];

console.log(myArray[1]); //undefined

console.log(myArray.length); //3 - doesn't actually shrink the array down



3 people think this answer is useful

If you want to remove all occurrences of a given object (based on some condition) then use the javascript splice method inside a for the loop.

Since removing an object would affect the array length, make sure to decrement the counter one step, so that length check remains intact.

var objArr=[{Name:"Alex", Age:62},
{Name:"Robert", Age:18},
{Name:"Prince", Age:28},
{Name:"Cesar", Age:38},
{Name:"Sam", Age:42},
{Name:"David", Age:52}
];

for(var i = 0;i < objArr.length; i ++)
{
if(objArr[i].Age > 20)
{
objArr.splice(i, 1);
}
}



The above code snippet removes all objects with age greater than 20.

3 people think this answer is useful

for (var i =0; i < someArray.length; i++)
if (someArray[i].name === "Kristian") {
someArray.splice(i,1);
}



is not working for multiple records fulfilling the condition. If you have two such consecutive records, only the first one is removed, and the other one skipped. You have to use:

for (var i = someArray.length - 1; i>= 0; i--)
...



2 people think this answer is useful

There seems to be an error in your array syntax so assuming you mean an array as opposed to an object, Array.splice is your friend here:

someArray = [{name:"Kristian", lines:"2,5,10"}, {name:"John", lines:"1,19,26,96"}];
someArray.splice(1,1)



2 people think this answer is useful

Use javascript’s splice() function.

This may help: http://www.w3schools.com/jsref/jsref_splice.asp

2 people think this answer is useful

You can use map function also.

someArray = [{name:"Kristian", lines:"2,5,10"},{name:"John",lines:"1,19,26,96"}];
newArray=[];
someArray.map(function(obj, index){
if(obj.name !== "Kristian"){
newArray.push(obj);
}
});
someArray = newArray;
console.log(someArray);



2 people think this answer is useful

You could also use some:

someArray = [{name:"Kristian", lines:"2,5,10"},
{name:"John", lines:"1,19,26,96"}];

someArray.some(item => {
if(item.name === "Kristian") // Case sensitive, will only remove first instance
someArray.splice(someArray.indexOf(item),1)
})



2 people think this answer is useful

This is what I use.

Array.prototype.delete = function(pos){
this[pos] = undefined;
var len = this.length - 1;
for(var a = pos;a < this.length - 1;a++){
this[a] = this[a+1];
}
this.pop();
}



Then it is as simple as saying

var myArray = [1,2,3,4,5,6,7,8,9];
myArray.delete(3);



Replace any number in place of three. After the expected output should be:

console.log(myArray); //Expected output 1,2,3,5,6,7,8,9



2 people think this answer is useful

I guess the answers are very branched and knotted.

You can use the following path to remove an array object that matches the object given in the modern JavaScript jargon.


coordinates = [
{ lat: 36.779098444109145, lng: 34.57202827508546 },
{ lat: 36.778754712956506, lng: 34.56898128564454 },
{ lat: 36.777414146732426, lng: 34.57179224069215 }
];

coordinate = { lat: 36.779098444109145, lng: 34.57202827508546 };

removeCoordinate(coordinate: Coordinate): Coordinate {
const found = this.coordinates.find((coordinate) => coordinate == coordinate);
if (found) {
this.coordinates.splice(found, 1);
}
return coordinate;
}



1 people think this answer is useful

splice(i, 1) where i is the incremental index of the array will remove the object. But remember splice will also reset the array length so watch out for ‘undefined’. Using your example, if you remove ‘Kristian’, then in the next execution within the loop, i will be 2 but someArray will be a length of 1, therefore if you try to remove “John” you will get an “undefined” error. One solution to this albeit not elegant is to have separate counter to keep track of index of the element to be removed.

1 people think this answer is useful

Returns only objects from the array whose property name is not “Kristian”

var noKristianArray = $.grep(someArray, function (el) { return el.name!= "Kristian"; });  Demo:  var someArray = [ {name:"Kristian", lines:"2,5,10"}, {name:"John", lines:"1,19,26,96"}, {name:"Kristian", lines:"2,58,160"}, {name:"Felix", lines:"1,19,26,96"} ]; var noKristianArray =$.grep(someArray, function (el) { return el.name!= "Kristian"; });

console.log(noKristianArray);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


1 people think this answer is useful

Here is an example with map and splice

const arrayObject = [
{ name: "name1", value: "value1" },
{ name: "name2", value: "value2" },
{ name: "name3", value: "value3" },
];

let index = arrayObject.map((item) => item.name).indexOf("name1");
if (index > -1) {

arrayObject.splice(index, 1);
console.log("Result", arrayObject);

}


0 people think this answer is useful

This Concepts using Kendo Grid

var grid = \$("#addNewAllergies").data("kendoGrid");

var selectedItem = SelectedCheckBoxList;

for (var i = 0; i < selectedItem.length; i++) {
if(selectedItem[i].boolKendoValue==true)
{
selectedItem.length= 0;
}
}



-1 people think this answer is useful

If you wanna access and remove object of an array simply you can try something like this.

// inside some function

let someArray = [ {"ColumnName" : "a", "PropertySerno" : 100005,"UpdateType" : 1},
{"ColumnName" : "b", "PropertySerno" : 100202,"UpdateType" : 1,
"ShowRemoveButton" : true} ];

for (let item of someArray) {
delete item.ShowRemoveButton;
}
console.log(item.outputMappingData.Data);

//output will be like that = [ {"ColumnName" : "a", "PropertySerno" : 100005,"UpdateType" : 1},
//                             {"ColumnName" : "b", "PropertySerno" : 100202,"UpdateType" : 1 }];