1

I have an array of objects:

var items = [{ id: 1, text: "test1" }, { id: 2, text: "test2" }, { id: 3, text: "test3"}];

I have the following object:

var itemToRemove = { id: 2, text: "test2" };

I want to check by id if itemToRemove exists in the items array.

And remove it:

  // pseudo code
  items.remove(itemToRemove);

I went through javascript array methods but found nothing that will do the job. Thanks!

2

2 Answers 2

2

Use filter:

items.filter(function (item) {
    return item.id !== 2 || item.text !== "text2";
});

It's generally not a good idea to mutate the original array or else I would recommend Sirko's answer. The filter method produces a whole new array. It doesn't mutate the original array.

Sign up to request clarification or add additional context in comments.

2 Comments

+1, but this won't work in crappy (i.e., IE < 9) browsers. You'd have to use some kind of a shim to add the filter method to the Array object.
@Robusto if (![].filter) Array.prototype.filter = function (callback, that) { var index = 0, length = this.length, list = []; while (index < length) { var item = this[index]; if (callback.call(that, item, index++, this)) list.push(item); } return list; };
1

Traverse the array by using a plain loop and then remove the matching item by using splice():

for( var i=0; i<items.length; i++ ) {
  if( items[i].id == itemToRemove.id ) {
    items.splice( i, 1 );  // remove the item
    break; // finish the loop, as we already found the item
  }
}

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.