首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将json映射到TypeScript中的特定格式?

如何将json映射到TypeScript中的特定格式?
EN

Stack Overflow用户
提问于 2021-02-03 03:42:08
回答 2查看 44关注 0票数 0

我有下面的json

代码语言:javascript
复制
[
   {
      "fullName":"Mariem",
      "startDate":"1917-04-25",
      "endDate":"1917-04-26",
      "endHour":"1330",
      "motif":"maladie"
   },
   {
      "fullName":"Mariem",
      "startDate":"1917-04-25",
      "endDate":"1917-04-26",
      "endHour":"1800",
      "motif":"renuion"
   },
   {
      "fullName":"Mariem",
      "startDate":"1917-05-25",
      "endDate":"1917-05-25",
      "endHour":"1600",
      "motif":"renuion"
   },
   {
      "fullName":"Jack",
      "startDate":"0017-01-25",
      "endDate":"0017-01-25",
      "endHour":"1030",
      "motif":null
   }
]

我可以像下面的json一样映射它,按fullName、startDate和endDate对对象进行分组,并添加一个包含endDate和motif的对象数组。

代码语言:javascript
复制
[
   {
      "fullName":"Mariem ",
      "startDate":"1917-04-25",
      "endDate":"1917-04-26",
      "data":[
         {
            "endHour":"1330",
            "motif":"maladie"
         },
         {
            "endHour":"1800",
            "motif":"renuion"
         }
      ]
   },
   {
      "fullName":"Mariem ",
      "startDate":"1917-05-25",
      "endHour":"1917-05-25",
      "data":[
         {
            "endHour":"1600",
            "motif":"renuion"
         }
      ]
   },
   {
      "fullName":"Jack",
      "startDate":"0017-01-25",
      "endDate":"0017-01-25",
      "data":[
         {
            "endHour":"1030",
            "motif":null
         }
      ]
   }
]
EN

回答 2

Stack Overflow用户

发布于 2021-02-03 03:58:04

如果我没理解错你的问题,你要找的东西如下:

代码语言:javascript
复制
interface SomeObj {
  fullName: string,
  startDate: string,
  endDate: string,
  endHour: string,
  motif: string
}

interface Time {
  endHour:string,
  motif:string
}

interface MappedObj {
  fullName: string,
  startDate: string,
  endHour: string,
  data: Time[]
}


function mapToFormat(o: SomeObj[]): MappedObj[] {
  return o.map(item => {
    return {
      fullName: item.fullName,
      startDate: item.startDate,
      endHour: item.endHour,
      data: [
        {
          endHour: item.endHour,
          motif: item.motif
        }
      ]
    }
  })
}
票数 0
EN

Stack Overflow用户

发布于 2021-02-03 04:11:08

您的示例输入和输出(交换endHourendDate)中都有错误。

这里有一个快速的解决方案:

代码语言:javascript
复制
const map = new Map();

elements.forEach(item => {
    const key = `${item.fullName}+${item.startDate}+${item.endDate}`;

    if (!map.has(key)) {
       map.set(key, {
         fullName: item.fullName,
         startDate: item.startDate,
         endDate: item.endDate,
         data: []
       });
    }

    map.get(key).data.push({
      endHour: item.endHour,
      motif: item.motif
    });
});

const result = Array.from(map.values());

输入为:

代码语言:javascript
复制
const elements = [
   {
      "fullName":"Mariem",
      "startDate":"1917-04-25",      
      "endDate":"1917-04-26",
      "endHour":"1330",
      "motif":"maladie"
   },
   {
      "fullName":"Mariem",
      "startDate":"1917-04-25",
      "endDate":"1917-04-26",
      "endHour":"1800",
      "motif":"renuion"
   },
   {
      "fullName":"Mariem",
      "startDate":"1917-05-25",
      "endDate":"1917-05-25",
      "endHour":"1600",
      "motif":"renuion"
   },
   {
      "fullName":"Jack",
      "startDate":"0017-01-25",
      "endDate":"0017-01-25",
      "endHour":"1030",
      "motif":null
   }
];

result变量的值为:

代码语言:javascript
复制
[
   {
      "fullName":"Mariem",
      "startDate":"1917-04-25",
      "endDate":"1917-04-26",
      "data":[
         {
            "endHour":"1330",
            "motif":"maladie"
         },
         {
            "endHour":"1800",
            "motif":"renuion"
         }
      ]
   },
   {
      "fullName":"Mariem",
      "startDate":"1917-05-25",
      "endDate":"1917-05-25",
      "data":[
         {
            "endHour":"1600",
            "motif":"renuion"
         }
      ]
   },
   {
      "fullName":"Jack",
      "startDate":"0017-01-25",
      "endDate":"0017-01-25",
      "data":[
         {
            "endHour":"1030",
            "motif":null
         }
      ]
   }
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66016570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档