javascript - 根据 Typescript 中的值对所有 JSON 键进行分组

标签 javascript json angular typescript mapreduce

我想根据值从单个 JSON 创建两个 JSON。以下是主要的 JSON 结构。

x = [
{id:"1",hobby:"videogames"},
{id:"1",hobby:"chess"},
{id:"2",hobby:"chess"},
{id:"3",hobby:"carrom"},
{id:"4",hobby:"videogames"},
{id:"4","hobby:"carrom"}
]

我想根据 ID 和 Hobby 创建两个 JSON。这样每个唯一的 ID 都会有一个包含其各自爱好的数组,并且每个独特的爱好都会有一个包含其各自提供者的数组

ID =[
    { 
      1: [
          {hobby:"videogames"},
          {hobby:"chess"}
         ]
    },
    {
     2: [
         {hobby:"chess"}
        ]
    },
    {
     3: [
         {hobby:"carrom"}
        ]
    },
    {
     4: [
         {hobby:"videogames"},
         {hobby:"carrom"}
       ]
    }        
    ];

Hobby= [
        {
          videogames:[
                      {id:"1"},
                      {id:"4"}
                     ]
        },
        {
          chess:[
                 {id:"2"}
                ]
        },
        {
          carrom:[
                  {id:"3"},
                  {id:"4"}
                 ]
        } 
      ]

最佳答案

您需要申请array.reduce函数构建字典,其中 idshobbies 是键,然后运行 ​​array.map 将此类字典转换为多个数组条目:

let x = [
   {id:"1",hobby:"videogames"},
   {id:"1",hobby:"chess"},
   {id:"2",hobby:"chess"},
   {id:"3",hobby:"carrom"},
   {id:"4",hobby:"videogames"},
   {id:"4",hobby:"carrom"}
];

let grouped = x.reduce((acc, cur) => {
  let {id, ...rest} = cur;
  if(!acc[id]){
     acc[id] = [];
  }
  acc[id].push(rest);
  return acc;
}, {});

let result = Object.entries(grouped).map(([key, value]) => ({[key]: value}))

console.log(result);

关于javascript - 根据 Typescript 中的值对所有 JSON 键进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62917316/

相关文章:

javascript - 使用断点调试时强制 chrome 刷新页面

c# - 带有期限和日期范围的汇总

javascript - 使用在两个(或更多)缓冲区 block 之间拆分的大型 JSON 的最佳方法是什么

javascript - 如何去抖 Angular 2 中的观察者函数?

angular - Angular 是否需要 RxJS?

angular - 在 Angular 2 中使用 Facebook SDK

javascript - 无法从 jQuery AJAX 请求获得响应

javascript - 如何获取Draft.js中Editor的onChange事件?

javascript - 基础 slider : how to figure out if just the value changed?

.net - 实现通用 Web 服务 API 的最佳方式