首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用约简对对象数组进行重构

使用约简对对象数组进行重构
EN

Stack Overflow用户
提问于 2022-08-03 21:59:45
回答 1查看 39关注 0票数 0

为了获得更好的用例,我想要更改当前Array的结构,我想按这个顺序将项分组到子数组中。足球>段名>联赛>比赛。我被困在这上面已经好几个小时了。我试图使用减缩,但我的尝试都没有接近成功。下面是样本数据和我想要达到的结果。

代码语言:javascript
复制
 const currentData = [
     {
          "fixtureName": "Fulham vs Chelsea",
          "league": "Premier League",
          "sport": "Soccer",
          "segmentName": "England",
          "markets": []
     },
        {
          "fixtureName": "Arsenal vs liverpool",
           "league": "Premier League",
          "sport": "Soccer",
          "segmentName": "England",
          "markets": []
     },   {
          "fixtureName": "Middlesbrough FC vs. West Bromwich Albion",
          "league": "Championship",
          "sport": "Soccer",
          "segmentName": "England",
          "markets": []
     },   {
        "fixtureName": "Club El Porvenir vs. Berazategui",
        "league": "Primera C",
        "sport": "Soccer",
        "segmentName": "Argentina",
        "markets": []
   },   {
          "fixtureName": "Lille vs Angers ",
          "league": "Ligue 1",
          "sport": "Soccer",
          "segmentName": "France",
          "markets": []
     },   {
          "fixtureName": "PSG vs Nantes",
          "league": "Ligue 1",
          "sport": "Soccer",
          "segmentName": "France",
          "markets": []
     },    {
          "fixtureName": "Argentino de Quilmes vs. Comunicaciones",
          "league": "Primera B",
          "sport": "Soccer",
          "segmentName": "Argentina",
          "markets": []
     
     },   {
          "fixtureName": "Deportivo Merlo vs. Club Atletico Fenix",
          "league": "Primera B",
          "sport": "Soccer",
          "segmentName": "Argentina",
          "markets": []
     },
  ]

这是我想要的输出和结果的类型

代码语言:javascript
复制
const data = [
  {
    sportID: 1,
    sportName: 'Soccer',
    categories: [
      {
        itemName: 'Argentina',
        tournaments: [
          {
            itemID: 1,
            itemName: 'ARG - Primera B',
            events: [
              {
                id: 1,
                itemName: 'Argentino de Quilmes vs. Comunicaciones',
                markets: [],
              },
              {
                id: 2,
                itemName: 'Deportivo Merlo vs. Club Atletico Fenix',
                markets: [],
              },
            ],
          },
          {
            itemID: 2,
            itemName: 'ARG - Primera C',
            events: [
              {
                id: 1,
                itemName: 'Club El Porvenir vs. Berazategui',
                markets: [],
              },
            ],
          },
        ],
      },
      {
        itemName: 'England',
        tournaments: [
          {
            itemID: 1,
            itemName: 'ENG - Premier League',
            events: [
              {
                id: 1,
                itemName: 'Arsenal vs Liverpool',
                markets: [],
              },
              {
                id: 2,
                itemName: 'Fulham vs Chelsea',
                markets: [],
              },
            ],
          },
          {
            itemID: 2,
            itemName: 'ENG - Championship',
            events: [
              {
                id: 1,
                itemName: 'Middlesbrough FC vs. West Bromwich Albion',
                markets: [],
              },
            ],
          },
        ],
      },
      {
        itemName: 'France',
        tournaments: [
          {
            itemID: 1,
            itemName: 'Ligue 1',
            events: [
              {
                id: 1,
                itemName: 'PSG vs Nantes',
                markets: [],
              },
              {
                id: 2,
                itemName: 'Lille vs Angers',
                markets: [],
              },
            ],
          },
         
        ],
      },
    ],
  },
];
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-03 22:25:46

预期的结果与输入不完全匹配,但是这里有一种方法,通过首先创建树的对象(如果还没有创建),将每个项reduce到树中的位置。

代码语言:javascript
复制
var currentData = [{"fixtureName":"Fulham vs Chelsea","league":"Premier League","sport":"Soccer","segmentName":"England","markets":[]},{"fixtureName":"Arsenal vs liverpool","league":"Premier League","sport":"Soccer","segmentName":"England","markets":[]},{"fixtureName":"Middlesbrough FC vs. West Bromwich Albion","league":"Championship","sport":"Soccer","segmentName":"England","markets":[]},{"fixtureName":"Club El Porvenir vs. Berazategui","league":"Primera C","sport":"Soccer","segmentName":"Argentina","markets":[]},{"fixtureName":"Lille vs Angers ","league":"Ligue 1","sport":"Soccer","segmentName":"France","markets":[]},{"fixtureName":"PSG vs Nantes","league":"Ligue 1","sport":"Soccer","segmentName":"France","markets":[]},{"fixtureName":"Argentino de Quilmes vs. Comunicaciones","league":"Primera B","sport":"Soccer","segmentName":"Argentina","markets":[]},{"fixtureName":"Deportivo Merlo vs. Club Atletico Fenix","league":"Primera B","sport":"Soccer","segmentName":"Argentina","markets":[]}]


var obj = currentData.reduce(function(agg, item) {
  agg[item.sport] ??= {}
  agg[item.sport][item.segmentName] ??= {}
  agg[item.sport][item.segmentName][item.league] ??= {}
  agg[item.sport][item.segmentName][item.league][item.fixtureName] ??= []
  agg[item.sport][item.segmentName][item.league][item.fixtureName].push(item)

  return agg;
}, {});

console.log(obj)
代码语言:javascript
复制
.as-console-wrapper {
  max-height: 100% !important;
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73228246

复制
相关文章

相似问题

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