我使用的是lodash方法 _.some
。
对于谓词,我只是在当前项上调用一个方法并返回值。
return _.some(items, function(item) {
return item.hasChanges();
});
这可以按预期工作!
但是,我想知道是否有一种简便的方法来执行此操作?
如果hasChanges
是属性,我可以这样做:
return _.some(items, "hasChanges");
我试图通过以下方式调用该方法:
return _.some(items, _.invoke(_.identity, "hasChanges"));
但它似乎没有按预期工作。
答案 0 :(得分:1)
如果你真的想要采用Lodash方式,可以使用_.partial
和_.result
或_.invoke
来构建自定义谓词的等价物。
_.some(users, _.partial(_.invoke, _, 'hasChanges'));
谓词可以创建一次并在以后使用:
var predicate = _.partial(_.invoke, _, 'hasChanges');
// later...
// a function which only checks, without creating a
// new anonymous function each time.
function check() {
return _.some(users, predicate);
}
ES6使用Array的some
函数和箭头函数。
items.some(item => item.hasChanged());
_.some
(或大多数some
函数实现)在第一个truthy发生时打破循环。类似_.invokeMap
的函数会在每个对象上调用该函数,而不管结果哪个效果低于我们已有的自定义谓词。
Lodash offers shorthand syntax for common predicates,但他们不会在对象上调用函数。
// The `_.matches` iteratee shorthand. _.some(users, { 'user': 'barney', 'active': false }); // => false // The `_.matchesProperty` iteratee shorthand. _.some(users, ['active', false]); // => true // The `_.property` iteratee shorthand. _.some(users, 'active'); // => true
以下工作没有成功:
_.invoke(_.identity, "hasChanges")
它类似于_.identity.hasChanges()
。