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']));