使用Underscore.js根据属性从数组中删除对象

时间:2014-05-28 14:52:20

标签: javascript underscore.js

我在javascript中有一个对象数组。每个对象的格式为

obj {
    location: "left", // some string
    weight: 0 // can be zero or non zero
}

我想返回一个数组的过滤副本,其中重量属性为零的对象被删除

使用下划线执行此操作的干净方法是什么?

6 个答案:

答案 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转换为布尔值,其中NULLfalse0将使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);