使用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; });