这有效:
MyCollection.prototype.select = function (properties) {
var self = this;
return {
where: function (conditions) {
return _.chain(self.arrayOfObjects)
.where(conditions)
.map(function (result) {
return _.pick(result, properties);
})
.value();
}
};
};
它允许我像这样查询我的收藏:
var people = collection
.select(['id', 'firstName'])
.where({lastName: 'Mars', city: 'Chicago'});
我希望能够编写这样的代码,但是:
MyCollection.prototype.select = function (properties) {
var self = this;
return {
where: function (conditions) {
return _.chain(self.arrayOfObjects)
.where(conditions)
.pick(properties);
.value();
}
};
};
Lo-Dash文档将_.pick
回调指定为“[callback](函数| ...字符串|字符串[]):每次迭代调用的函数或要选择的属性名称,指定为单个属性名称或数组财产名称。“这让我相信我可以提供属性数组,该数组将应用于符合条件的arrayOfObjects
中的每个项目。我错过了什么?
答案 0 :(得分:5)
它希望Object
作为第一个参数,你给它一个Array
。
Arguments
1. object (Object): The source object.
2. ...
3. ...
我认为这是你能做的最好的事情:
MyCollection.prototype.select = function (properties) {
var self = this;
return {
where: function (conditions) {
return _.chain(self.arrayOfObjects)
.where(conditions)
.map(_.partialRight(_.pick, properties))
.value();
}
};
};
答案 1 :(得分:2)
它不起作用,因为_.pick
需要一个对象,而不是从链中的where
函数传递的集合。