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