为了账号安全,请及时绑定邮箱和手机立即绑定

使用 lodash 迭代内部对象

使用 lodash 迭代内部对象

慕少森 2022-12-18 15:41:48
这是我的 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,但没有用。如果有人帮助我解决这个问题,那就太好了。提前致谢!
查看完整描述

2 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

你可以使用 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

    })),


查看完整回答
反对 回复 2022-12-18
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

您可以使用toArrayand mapValueslike 如下所示:


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>


查看完整回答
反对 回复 2022-12-18
  • 2 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号