下划线相当于_.选择数组



我理解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'}]

,我想将它映射到一个数组,以便只包含nameage属性,如:

[{name: 'moe1', age: 50},
{name: 'moe2', age: 50},
{name: 'moe3', age: 50}]

我是否必须在数组上执行each(),然后在每个对象上执行pick(),或者有更清洁的方法?

编辑

对不起,但只是另一个小要求,我该如何执行where(即获得所有年龄大于50岁的人),然后执行pick ?编辑像这样完成了,不知道在下划线中链接是如何工作的。

_(data).reject(function (r) { return d.age<51; }).map(function (o) {
            return _.pick(o, "age", "name");
});

您必须使用_.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 } ]

你也可以对链接做同样的事情,正如rightfold所建议的那样,像这样

var result = _.chain(data).filter(filterByAge).map(omitUserId).value();

您可以只使用一个lodash方法(~50kb import):

npm i lodash.pick

解决方案:

const pick = require('lodash.pick')
const filterValues = ['name', 'age']
const arr = [
    { name: 'moe1', age: 52, userid: 'moe1' },
    { name: 'moe2', age: 50, userid: 'moe1' },
    { name: 'moe3', age: 50, userid: 'moe1' }
]
const result = arr
    .filter(item => item.age < 51)
    .map(item => pick(item, filterValues))
输出:

[ { name: 'moe2', age: 50 }, { name: 'moe3', age: 50 } ]

最新更新