首页 > 解决方案 > 使用 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's partialRight,但它似乎不适用于可迭代对象,并且还尝试了 flatMap,但没有奏效。如果有人帮助我解决这个问题,那就太好了。提前致谢!

标签: javascriptecmascript-6lodash

解决方案


你可以使用 vanilla javascript 而不是 Lodash 来做到这一点。寻找像 map/reduce/filter 这样的 ES6 方法。例子 :

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
    })),
} 

推荐阅读