我有以下obj:
{ Id: '11ea9563-1a4c-c21b-904f-00ff98e8d5ab',
Email: 'Email',
Password:
{ type: 'Buffer',
data:
[ Buffer value] },
roles: [ { Name: 'Developer', userroles: [Object] } ],
Events:
[ { Id: '11ea9556-c025-39ae-904f-00ff98e8d5ab'} ] }
我想使用lodash来获取Id
,roles.Name
和Events.Id
:
_.pick(obj, ['Id', 'roles.Name', 'Events.Id']),
但是通过上面的操作,我只能设法获得ID。
如何用lodash完成此操作?
答案 0 :(得分:2)
const answer = {
id: obj.Id,
roles: _.map(obj.roles, 'Name'),
events: _.map(obj.Events, 'Id')
};
const obj = {
Id: '11ea9563-1a4c-c21b-904f-00ff98e8d5ab',
Email: 'Email',
Password: {
type: 'Buffer'
},
roles: [ { Name: 'Developer', userroles: [Object] } ],
Events:
[ { Id: '11ea9556-c025-39ae-904f-00ff98e8d5ab'} ]
}
answer = {
id: obj.Id,
roles: _.map(obj.roles, 'Name'),
events: _.map(obj.Events, 'Id')
};
console.log(answer);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
答案 1 :(得分:2)
从我读过的here来看,您不能使用_.pick
进行深度挑选。结合使用_.get
和_.map
var _ = require("lodash")
const data = {
Id: '11ea9563-1a4c-c21b-904f-00ff98e8d5ab',
Email: 'Email',
Password: { type: 'Buffer' },
roles: [
{ Name: 'Developer', userroles: [Object] }
],
Events: [ { Id: '11ea9556-c025-39ae-904f-00ff98e8d5ab' } ]
}
var result = {
Id: data.Id,
Email: data.Email,
'roles.Name': _.map(data.roles, 'Name'), /* Returns expected array of object values */
'roles.Name': _.map(data.roles, o => _.pick(o, ['Name'])), /* Returns expected array of object */
'Events.Id': _.map(data.Events, 'Id'),
};
console.log(result)
答案 2 :(得分:1)
不确定这是否是最好的答案,但是现在我已经完成了以下工作:
感谢@ marco-a
我分析了this answer,并提出了以下建议:
const deepPick = (paths, obj) => _.fromPairs(paths.map(p => [_.last(p.split('.')), _.get(obj, p)]));
到目前为止,我自己的解决方案:
const data = _.pick(obj, ['Id', 'roles', 'events']);
const userRoles = data.roles.map(role=> deepPick(['Name'], role));
const eventIds = data.events.map(eventId=> deepPick(['Id'], eventId));
输出变为:
{
"id": "11ea9563-1a4c-c21b-904f-00ff98e8d5ab",
"roles": [
{
"Name": "Developer"
},
{
"Name": "Admin"
}
],
"events": [
{
"Id": "11ea9556-c025-39ae-904f-00ff98e8d5ab"
}
]
},
}