使用 Underscore.js 基于属性从数组中移除对象

7

我有一个JavaScript对象数组,每个对象的形式为

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

我希望能返回一个过滤后的数组副本,其中具有权重属性为零的对象被移除。
使用underscore,最好的方法是什么?
6个回答

24

您甚至不需要使用下划线,因为在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; });

删除暗示着标识保留,这将返回一个副本,因此实际上是在查询。 - Sebastian Sastre

3

filter 可以完成这项工作。

_.filter(data, function(item) { return !!item.weight; });

!!用于将item.weight转换为布尔值,其中NULLfalse0将使其变为false并将其过滤掉。


3
这应该可以做到:
_.filter(myArray, function(o){ return o.weight; });

2
你也可以使用下划线的reject函数。
var newObjects = _.reject(oldObjects, function(obj) { 
    return obj.weight === 0; 
});

1

老问题,但我想发表我的意见:

_.omit(data, _.where(data, {'weight':0}));

0
return this.data = _.without(this.data, obj);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接