【问题标题】:Merge items in an array including sub items合并数组中的项目,包括子项目
【发布时间】:2022-01-21 08:54:15
【问题描述】:

我有一个数组如下:

 [
  {
    Region: 'Sionnach',
    Area: 'Station',
    Codes: '76534675'
  },
  {
    Region: 'Cape',
    Area: 'Dreg',
    Codes: '73457347'
  },
  {
    Region: 'Cape',
    Area: 'Dreg',
    Codes: '7653737'
  },
  {
    Region: 'Stone',
    Area: 'Lights',
    Codes: '612342136'
  },
  { 
    Region: 'Stone',
    Area: 'Pram',
    Codes:'73247237'
  },
]

我希望它显示如下:

  [
    {
      Region: "Sionnach",
      Area: {
        Station: {
          Codes: "76534675",
        },
      },
    },
    {
      Region: "Cape",
      Area: {
        Dreg: {
          Codes: "73457347",
          Codes: "7653737",
        },
      },
    },
    {
      Region: "Stone",
      Area: {
        Lights: {
          Codes: "612342136",
        },
        Pram: {
          Codes: "73247237",
        },
      },
    },
  ]
         

有人可以告诉我如何做到这一点吗? 我尝试了很多方法,但我似乎无法弄清楚我需要做什么,它可能真的很简单,在这里坐了 3 个小时,我似乎无法找到一种方法来做到这一点。

【问题讨论】:

    标签: node.js arrays sorting


    【解决方案1】:

    你不能拥有一个具有两个相同键的对象

    { Codes: "73457347", Codes: "7653737" }
    

    所以我建议将它们保存为一个数组,因为一个区域似乎可能有多个代码。

    实现你想要的:

    • 使用Array#reduce,迭代数组,同时更新Map,其中区域为key,预期的分组区域对象为value。在每次迭代中,如果存在,则获取当前区域记录。然后,更新其Area 对象,其中当前区域是键,其代码列表是值。最后,使用Map#set 更新地图。
    • 使用Map#values,您最终会得到区域分组列表及其对应区域。

    const arr =  [ { Region: 'Sionnach', Area: 'Station', Codes: '76534675' }, { Region: 'Cape', Area: 'Dreg', Codes: '73457347' }, { Region: 'Cape', Area: 'Dreg', Codes: '7653737' }, { Region: 'Stone', Area: 'Lights', Codes: '612342136' }, { Region: 'Stone', Area: 'Pram', Codes:'73247237' } ];
    
    const res = [...
      arr.reduce((map, { Region, Area, Codes }) => {
        const regionAreas = map.get(Region)?.Area ?? {};
        regionAreas[Area] = [...(regionAreas[Area] ?? []), Codes];
        map.set(Region, { Region, Area: regionAreas });
        return map;
      }, new Map)
      .values()
    ];
    
    console.log(res);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-02
      • 2012-05-06
      • 1970-01-01
      • 2013-06-27
      • 2012-11-26
      • 2017-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多