使用UnderscoreJS从数组中删除一个项目

说我有这个代码

 var arr = [{id:1,name:'a'},{id:2,name:'b'},{id:3,name:'c'}];

我想从数组中删除ID = 3的项目。 有没有拼接的方法吗? Maye使用下划线或类似的东西?

谢谢!

只是使用普通的JavaScript,已经得到了回答: 通过对象属性从数组中删除对象 。

使用underscore.js,你可以结合.findWhere.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="ajax/libs/underscore.js/1.8.3/underscore-min.js"></script> 

您可以使用.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 }); 

也可以写成:

 var filtered = arr.filter(function(item) { return item.id !== 3 }); var filtered = _.filter(arr, function(item) { return item.id !== 3 }); 

检查小提琴

你也可以使用.reject

使用下划线_.reject()

 arr = _.reject(arr, function(d){ return d.id === 3; }); 

Underscore有一个_without()方法非常适合从数组中删除项目,特别是如果您有要删除的对象。

返回已删除值的所有实例的数组副本。

 _.without(["bob", "sam", "fred"], "sam"); => ["bob", "fred"] 

也可以使用更复杂的对象。

 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 }]; 

如果您没有要删除的项目,只是它的一个属性,您可以使用_.findWhere然后_.without

如果您正在过滤string并寻找不区分大小写的filter,请小心。 _.without()区分大小写。 您也可以使用_.reject(),如下所示。

 var arr = ["test","test1","test2"]; var filtered = _.filter(arr, function(arrItem) { return arrItem.toLowerCase() !== "TEST".toLowerCase(); }); console.log(filtered); // ["test1", "test2"] var filtered1 = _.without(arr,"TEST"); console.log(filtered1); // ["test", "test1", "test2"] var filtered2 = _.reject(arr, function(arrItem){ return arrItem.toLowerCase() === "TEST".toLowerCase(); }); console.log(filtered2); // ["test1", "test2"] 
 arr.splice(_.findIndex(arr, { id: 3 }), 1); 

或另一个方便的方式:

 _.omit(arr, _.findWhere(arr, {id: 3})); 

我的2美分

我曾经尝试过这种方法

 _.filter(data, function(d) { return d.name != 'a' }); 

用户提供的上述解决scheme也可能有更好的方法

您可以使用Underscore的拒绝方法,下面将返回一个不包含特定匹配数组的新数组

 arr = _.reject(arr, function(objArr){ return objArr.id == 3; });