首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组的_.pick等号下划线

数组的_.pick等号下划线
EN

Stack Overflow用户
提问于 2014-03-09 09:53:18
回答 2查看 20K关注 0票数 15

据我所知,pick用于取回只具有指定属性的对象:

代码语言:javascript
复制
_.pick({name: 'moe', age: 50, userid: 'moe1'}, 'name', 'age');
=> {name: 'moe', age: 50}

如何对数组执行相同的操作,例如,我有一个数组,如:

代码语言:javascript
复制
[{name: 'moe1', age: 50, userid: 'moe1'},
{name: 'moe2', age: 50, userid: 'moe1'},
{name: 'moe3', age: 50, userid: 'moe1'}]

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

代码语言:javascript
复制
[{name: 'moe1', age: 50},
{name: 'moe2', age: 50},
{name: 'moe3', age: 50}]

我必须对数组执行一个each(),然后对每个对象执行一个pick(),还是有一个更干净的方法?

编辑

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

代码语言:javascript
复制
_(data).reject(function (r) { return d.age<51; }).map(function (o) {
            return _.pick(o, "age", "name");
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-09 09:54:50

您必须使用_.map并对所有对象应用相同的_.pick

代码语言:javascript
复制
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);

输出

代码语言:javascript
复制
[ { name: 'moe1', age: 50 },
  { name: 'moe2', age: 50 },
  { name: 'moe3', age: 50 } ]

如果您想获得年龄> 50岁的对象,您可能需要这样做:

代码语言:javascript
复制
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);

输出

代码语言:javascript
复制
[ { name: 'moe3', age: 60 } ]

您也可以使用链接,as suggested by rightfold,如下所示

代码语言:javascript
复制
var result = _.chain(data).filter(filterByAge).map(omitUserId).value();
票数 32
EN

Stack Overflow用户

发布于 2022-05-16 15:48:39

对于这个(~50 for的导入),您只需使用一种交存方法:

代码语言:javascript
复制
npm i lodash.pick

解决方案:

代码语言:javascript
复制
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))

输出:

代码语言:javascript
复制
[ { name: 'moe2', age: 50 }, { name: 'moe3', age: 50 } ]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22280775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档