>source

내 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을 시도했지만 작동하지 않는 것 같습니다. 누군가 내가 이것을 해결하도록 도와 주면 좋을 것입니다. 미리 감사드립니다!


  • 답변 # 1

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

  • 답변 # 2

    당신이 사용할 수있는 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>
    
    

관련 자료

  • 이전 javascript - 투명 사각형 영역 내에서 개체를 제한하는 방법 - fabricjs?
  • 다음 C ++ 클래스 함수를 그룹으로