Just using plain JavaScript, this has been answered already: remove objects from array by object property.
Using underscore.js, you could combine .findWhere
with .without
:
var arr = [{
id: 1,
name: 'a'
}, {
id: 2,
name: 'b'
}, {
id: 3,
name: 'c'
}];
//substract third
arr = _.without(arr, _.findWhere(arr, {
id: 3
}));
console.log(arr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
Although, since you are creating a new array in this case anyway, you could simply use _.filter
or the native Array.prototype.filter
function (just like shown in the other question). Then you would only iterate over array once instead of potentially twice like here.
If you want to modify the array in-place, you have to use .splice
. This is also shown in the other question and undescore doesn't seem to provide any useful function for that.
You can use Underscore .filter
var arr = [{
id: 1,
name: 'a'
}, {
id: 2,
name: 'b'
}, {
id: 3,
name: 'c'
}];
var filtered = _(arr).filter(function(item) {
return item.id !== 3
});
Can also be written as:
var filtered = arr.filter(function(item) {
return item.id !== 3
});
var filtered = _.filter(arr, function(item) {
return item.id !== 3
});
Check Fiddle
You can also use .reject
Use Underscore _.reject()
:
arr = _.reject(arr, function(d){ return d.id === 3; });
Underscore has a _without() method perfect for removing an item from an array, especially if you have the object to remove.
Returns a copy of the array with all instances of the values removed.
_.without(["bob", "sam", "fred"], "sam");
=> ["bob", "fred"]
Works with more complex objects too.
var bob = { Name: "Bob", Age: 35 };
var sam = { Name: "Sam", Age: 19 };
var fred = { Name: "Fred", Age: 50 };
var people = [bob, sam, fred]
_.without(people, sam);
=> [{ Name: "Bob", Age: 35 }, { Name: "Fred", Age: 50 }];
If you don't have the item to remove, just a property of it, you can use _.findWhere
and then _.without
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With