我在javascript中有一个对象数组。每个对象的格式为
obj {
location: "left", // some string
weight: 0 // can be zero or non zero
}
我想返回一个数组的过滤副本,其中重量属性为零的对象被删除
使用下划线执行此操作的干净方法是什么?
答案 0 :(得分:23)
你甚至不需要强调这一点,因为从ECMAScript 5开始就有filter
方法:
var newArr = oldArr.filter(function(o) { return o.weight !== 0; });
但是如果你想使用下划线(例如,支持不支持ECMAScript 5的旧浏览器),你可以使用它的filter
方法:
var newArr = _.filter(oldArr, function(o) { return o.weight !== 0; });
答案 1 :(得分:3)
filter
应该完成这项工作
_.filter(data, function(item) { return !!item.weight; });
!!
用于将item.weight
转换为布尔值,其中NULL
,false
或0
将使false
成为{{1}} ,并将其过滤掉。
答案 2 :(得分:3)
这应该这样做:
_.filter(myArray, function(o){ return o.weight; });
答案 3 :(得分:2)
您还可以使用下划线的拒绝功能。
var newObjects = _.reject(oldObjects, function(obj) {
return obj.weight === 0;
});
答案 4 :(得分:1)
老问题,但我的2美分:
_.omit(data, _.where(data, {'weight':0}));
答案 5 :(得分:0)
return this.data = _.without(this.data, obj);