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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.