使用lodash迭代内部对象



这是我的JSON对象:

{
"id": 2,
"full_name": "Karan Kumar",
"user_skills": [
{
"skill_id": 1,
"skill": {
"skill_name": "Angular 8"
}
},
{
"skill_id": 3,
"skill": {
"skill_name": "Java Spring"
}
}
],
"resource_allocateds": [
{
"project_id": 1,
"end_date": "2019-06-20",
"project": {
"project_name": "Inventory System"
}
},
{
"project_id": 2,
"end_date": "2020-01-15",
"project": {
"project_name": "Hospital Management System"
}
}
]
}

我想从上面的JSON中选择某些属性,我想让它像这样:

{
"id": 1,
"full_name": "Karan Kumar",
"skills": [{
"skill_id": 1,
"skill_name": "Angular 8"
},
{
"skill_id": 3,
"skill_name": "Java Spring"
}],
"resource_allocateds": [{
"project_id": 1,
"end_date": "2019-06-20",
"project_name": "Inventory System"
},
{
"project_id": 2,
"end_date": "2020-01-15",
"project_name": "Hospital Management System"
}]
}

我尝试过使用Lodash的partialRight,但它似乎对可迭代对象不起作用,还尝试过flatMap,但不起作用。如果有人帮我解决这个问题就太好了。提前感谢!

您可以使用普通javascript而不是Lodash来实现这一点。查找ES6方法,如map/reduced/filter。示例:

const input = {
"id": 2,
"full_name": "Karan Kumar",
"user_skills": [
{
"skill_id": 1,
"skill": {
"skill_name": "Angular 8"
}
},
{
"skill_id": 3,
"skill": {
"skill_name": "Java Spring"
}
}
],
"resource_allocateds": [
{
"project_id": 1,
"end_date": "2019-06-20",
"project": {
"project_name": "Inventory System"
}
},
{
"project_id": 2,
"end_date": "2020-01-15",
"project": {
"project_name": "Hospital Management System"
}
}
]
};
const { id, full_name, user_skills, resource_allocateds } = input;
const output = {
id,
full_name,
skills: user_skills.map(item => ({
skill_id: item.skill_id,
skill_name: item.skill.skill_name
})),
resource_allocateds: resource_allocateds.map(item => ({
project_id: item.project_id,
end_date: item.end_date,
project_name: item.project.project_name
})),
} 

您可以使用toArraymapValues,如下所示:

const jsonData = {
"id": 2,
"full_name": "Karan Kumar",
"user_skills": [
{
"skill_id": 1,
"skill": {
"skill_name": "Angular 8"
}
},
{
"skill_id": 3,
"skill": {
"skill_name": "Java Spring"
}
}
],
"resource_allocateds": [
{
"project_id": 1,
"end_date": "2019-06-20",
"project": {
"project_name": "Inventory System"
}
},
{
"project_id": 2,
"end_date": "2020-01-15",
"project": {
"project_name": "Hospital Management System"
}
}
]
};
const transformedJson = {...jsonData};
transformedJson.user_skills = _.toArray(_.mapValues(transformedJson.user_skills, ({ skill_id, skill }) => {
return {
skill_id,
skill_name: skill.skill_name
};
}));
transformedJson.resource_allocateds = _.toArray(_.mapValues(transformedJson.resource_allocateds, ({ project_id, project }) => {
return {
project_id,
project_name: project.project_name
};
}));
document.getElementById('jsonResults').innerHTML = JSON.stringify(transformedJson, null, 2);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.19/lodash.min.js"></script>
<pre id="jsonResults"></pre>

最新更新