我知道pick用于获取仅具有指定属性的对象:
_.pick({name: 'moe', age: 50, userid: 'moe1'}, 'name', 'age');
=> {name: 'moe', age: 50}
我如何在数组上执行相同的操作,比如我有一个数组,如:
[{name: 'moe1', age: 50, userid: 'moe1'},
{name: 'moe2', age: 50, userid: 'moe1'},
{name: 'moe3', age: 50, userid: 'moe1'}]
我希望将其映射到数组,以便仅包含name
和age
属性,例如:
[{name: 'moe1', age: 50},
{name: 'moe2', age: 50},
{name: 'moe3', age: 50}]
我是否必须在阵列上执行each()
然后对每个对象执行pick()
,或者是否有更清洁的方式?
修改
很抱歉,但只是另一个小要求,我将如何执行某个地方(即获取所有年龄大于50岁的人),然后执行pick
?
的修改
像这样完成它,不知道链接如何在下划线中起作用。
_(data).reject(function (r) { return d.age<51; }).map(function (o) {
return _.pick(o, "age", "name");
});
答案 0 :(得分:30)
您必须使用_.map
并对所有对象应用相同的_.pick
。
var data = [{name: 'moe1', age: 30, userid: 'moe1'},
{name: 'moe2', age: 50, userid: 'moe1'},
{name: 'moe3', age: 60, userid: 'moe1'}];
var result = _.map(data, function(currentObject) {
return _.pick(currentObject, "name", "age");
});
console.log(result);
<强>输出强>
[ { name: 'moe1', age: 50 },
{ name: 'moe2', age: 50 },
{ name: 'moe3', age: 50 } ]
如果你想获得年龄为的对象> 50,你可能想做,像这样
var data = [{name: 'moe1', age: 30, userid: 'moe1'},
{name: 'moe2', age: 50, userid: 'moe1'},
{name: 'moe3', age: 60, userid: 'moe1'}];
function filterByAge(currentObject) {
return currentObject.age && currentObject.age > 50;
}
function omitUserId(currentObject) {
return _.omit(currentObject, "userid");
}
var result = _.map(_.filter(data, filterByAge), omitUserId);
console.log(result);
<强>输出强>
[ { name: 'moe3', age: 60 } ]
您可以使用链接as suggested by rightfold执行相同操作,就像这样
var result = _.chain(data).filter(filterByAge).map(omitUserId).value();