首页 > 解决方案 > 将对象数组转换为所需格式

问题描述

我有一组数据。

let list = [
    {
        "Id": 1,
        "Name": "North Campus",
        "OptId": 1,
        "OptName": "Religious Reasons",
        "mapped": 1
    },
    {
        "Id": 2,
        "Name": "JNTUK",
        "OptId": 1,
        "OptName": "Religious Reasons",
        "mapped": 1
    },
    {
        "Id": 3,
        "Name": "JNTUH",
        "OptId": 1,
        "OptName": "Religious Reasons",
        "mapped": 1
    },
    {
        "Id": 1,
        "Name": "North Campus",
        "OptId": 2,
        "OptName": "Medical Reasons",
        "mapped": 1
    },
    {
        "Id": 2,
        "Name": "JNTUK",
        "OptId": 2,
        "OptName": "Medical Reasons",
        "mapped": 1
    },
    {
        "Id": 3,
        "Name": "JNTUH",
        "OptId": 2,
        "OptName": "Medical Reasons",
        "mapped": 0
    },
    {
        "Id": 4,
        "Name": "Sample Name",
        "OptId": 2,
        "OptName": "Medical Reasons",
        "mapped": 1
    },
    {
        "Id": 5,
        "Name": "updated name",
        "OptId": 2,
        "OptName": "Medical Reasons",
        "mapped": 0
    }
]

我的预期输出是

[
    {
        "OptName": "Medical Reasons",
        "OptId": 2,
        "campuses": [
            {
                "Id": 5,
                "Name": "updated name",
                "mapped": 0
            },
            {
                "Id": 4,
                "Name": "Sample Name",
                "mapped": 1
            },
            {
                "Id": 3,
                "Name": "JNTUH",
                "mapped": 0
            },
            {
                "Name": "JNTUK",
                "OptId": 2,
                "mapped": 1
            }
        ]
    },
    {
        "OptName": "Religious Reasons",
        "OptId": 1,
        "campuses": [
            {
                "Id": 1,
                "Name": "North Campus",
                "mapped": 1
            },
            {
                "Id": 2,
                "Name": "JNTUK",
                "mapped": 1
            },
            {
                "Id": 3,
                "Name": "JNTUH",
                "mapped": 1
            },
            {
                "Name": "JNTUK",
                "OptId": 2,
            }
        ]

        
    }
]

标签: javascriptnode.js

解决方案


let list = [ { "Id": 1, "Name": "North Campus", "OptId": 1, "OptName": "Religious Reasons", "mapped": 1 }, { "Id": 2, "Name": "JNTUK", "OptId": 1, "OptName": "Religious Reasons", "mapped": 1 }, { "Id": 3, "Name": "JNTUH", "OptId": 1, "OptName": "Religious Reasons", "mapped": 1 }, { "Id": 1, "Name": "North Campus", "OptId": 2, "OptName": "Medical Reasons", "mapped": 1 }, { "Id": 2, "Name": "JNTUK", "OptId": 2, "OptName": "Medical Reasons", "mapped": 1 }, { "Id": 3, "Name": "JNTUH", "OptId": 2, "OptName": "Medical Reasons", "mapped": 0 }, { "Id": 4, "Name": "Sample Name", "OptId": 2, "OptName": "Medical Reasons", "mapped": 1 }, { "Id": 5, "Name": "updated name", "OptId": 2, "OptName": "Medical Reasons", "mapped": 0 } ]

console.log(list.reduce((arr, el) => {
  let target = arr.find(({OptId}) => OptId === el.OptId);
  if(!target) {
    target = {OptName: el.OptName, OptId: el.OptId, campuses: []};
    arr.push(target);
  } 
  target.campuses.push({
    Id: el.Id,
    Name: el.Name,
    mapped: el.mapped
  })
  return arr;
},[]));


推荐阅读