Javascript lodash从数组中拾取对象字段

Javascript lodash从数组中拾取对象字段,javascript,lodash,Javascript,Lodash,我有一组对象: var results= [ { "_type": "MyType", "_id": "57623535a44b8f1417740a13", "_source": { "info": { "year": 2010, "number": "string", }, "type": "stole

我有一组对象:

var results= [
    {         
      "_type": "MyType",
      "_id": "57623535a44b8f1417740a13",         
      "_source": {
        "info": {
          "year": 2010,
          "number": "string",             
        },
        "type": "stolen",           
        "date": "2016-06-16T00:00:00",
        "createdBy": "57469f3c71c8bf2479d225a6"            
      }
    }
  ];
我需要从数组中选择特定字段。因此,我希望得到以下结果:

[
    {
        "_id": "57623535a44b8f1417740a13",
        "info": {
            "year": 2010,
            "number": "string"
        },
        "type": "stolen",            
        "date": "2016-06-16T00:00:00",
        "createdBy": "57469f3c71c8bf2479d225a6"
    }
]
如您所见,我想选择
\u id
字段和
\u source
对象的内容。我怎样才能用lodash做到这一点

我找到了
.map
函数,但它不接受一组键:

var res=u.map(结果,“_源”);

在纯Javascript中,您可以迭代并为每个对象组装一个新对象,而不会破坏原始对象

var results=[{u-type:“MyType”,“u-id:“57623535a44b8f1417740a13”,“u-source:{”info:{“年份”:2010,“数字”:“字符串”,},“type:“被盗”,“日期”:“2016-06-16T00:00:00”,“createdBy:“57469f3c71c8bf2479d225a6”}],
res=results.map(函数(a){
var o={u-id:a.\u-id};
[“info”、“type”、“date”、“createdBy”].forEach(函数(k){
o[k]=a._源[k];
});
返回o;
});
控制台日志(res)
var结果=[{
_类型:“MyType”,
_id:“57623535a44b8f1417740a13”,
_资料来源:{
信息:{
年份:2010年,
编号:“字符串”,
},
类型:“被盗”,
日期:“2016-06-16T00:00:00”,
创建人:“57469f3c71c8bf2479d225a6”
}
}];
var rootProperty=[''\u id']
var innerProperty=“\u源”
var myArray=\.map(结果,结果=>\(结果)
.pick(rootProperty)
.assign(u.result(result,innerProperty))
.value()
)
console.log(myArray)
。作为控制台包装{最大高度:100%!重要;顶部:0;}
您可以将结果和每个项目的
\u id
键值放在一个对象中,以便与
\u source
对象一起使用

results = _.map(results, item => _.assign(
  { _id: item._id }, 
  item._source
));
var结果=[{
“_类型”:“MyType”,
“_id”:“57623535a44b8f1417740a13”,
“_来源”:{
“信息”:{
“年份”:2010年,
“数字”:“字符串”,
},
“类型”:“被盗”,
“日期”:“2016-06-16T00:00:00”,
“createdBy”:“57469f3c71c8bf2479d225a6”
}
}];
results=\.map(results,item=>\.assign(
{{u id:item.{u id},
项目.\u来源
));
document.write(''+JSON.stringify(results,0,4)+'')
您可以执行以下操作:

一点解释:

  • :需要一个从集合中获取每个项的函数,以便您可以将其映射到其他项
  • :获取一个函数,该函数稍后将被调用,并将其参数附加到末尾
  • :获取从对象指定的路径

  • 我有同样的要求,下面的解决方案最适合我

    让用户=[
    {
    “_id”:“5ead7783ed74d152f86de7b0”,
    “名字”:“用户名1”,
    “姓氏”:“用户姓氏1”,
    “电子邮件”:user1@example.com",
    “电话”:958778888
    },
    {
    “_id”:“5ead7b780d4bc43fd0ef92e7”,
    “名字”:“用户名1”,
    “姓氏”:“用户姓氏1”,
    “电子邮件”:user2@example.com",
    “电话”:958778888
    }
    ];
    users=users.map(user=>\uu.pick(user,['\u id','first\u name']))
    console.log(用户)

    谢谢你的回答,我知道如何使用普通JS,我的普通代码看起来几乎和你的一样,但我经常使用lodash,以减少代码大小,提高可读性等等,如果我可以用lodash来实现这一点,请看一看
    var mapped = _.map(results, _.partialRight(_.pick, ['_id', 'info', 'type', 'date', 'createdBy']));