任何时候你开始做类似的事情_.f(_.g(...))
,你都应该考虑使用_.chain
. 你可以这样做:
var a = _.chain(activities.toJSON())
.select(function(a) { return a.verb !== 'test' })
.map(function(a) { return a.object })
.value();
我还调整了您的逻辑以简化事情,无需两次进行相同的测试。如果将函数放入变量中,则可以使这种事情变得非常可读:
var not_tests = function(a) { return a.verb !== 'test' };
var extract_obj = function(a) { return a.object };
var results = _.chain(activities.toJSON())
.select(not_tests)
.map(extract_obj)
.value();
演示:http: //jsfiddle.net/ambiguous/EQfuH/
使用这种方法会有相当多的复制,因此您可能只想走老路并使用循环:
var json = activities.toJSON();
var a = [ ];
for(var i = 0; i < json.length; ++i)
if(json[i].verb !== 'test')
a.push(json[i].object);
JavaScript 中的循环没有任何问题。