Javascript ES5:如何在不使用Lodash或下划线的情况下,通过键值对象的平面数组对键进行分组并创建Sub对象

问题描述 投票:0回答:6

我有一个带有4个键的对象数组:

[
  {
    "team": "USA",
    "team_profile_id": "10",
    "player": "Captain America",
    "player_id": "10X1"
  },
  {
    "team": "USA",
    "team_profile_id": "10",
    "player": "The hulk",
    "player_id": "10X2"
  },
  {
    "team": "India",
    "team_profile_id": "20",
    "player": "Captain America",
    "player_id": "10X1"
  },
  {
    "team": "India",
    "team_profile_id": "20",
    "player": "SpiderMan",
    "player_id": "10X5"
  }
]

而且我想按“团队”对我的数组进行分组,以便为​​每个团队创建一个Player对象数组。>

 [
  {
    "team": "USA",
    "team_profile_id": "10",
    "Players": [
      {
        "player": "Captain America",
        "player_id": "10X1"
      },
      {
        "player": "The hulk",
        "player_id": "10X2"
      }
    ]
  },
  {
    "team": "India",
    "team_profile_id": "20",
    "Players": [
      {
        "player": "Captain America",
        "player_id": "10X1"
      },
      {
        "player": "SpiderMan",
        "player_id": "10x5"
      }
    ]
  }
]

我目前正在尝试使用MDN原型中的reduce函数,但它无法处理子对象创建部分。

当前我已经尝试过:

var group_to_values = result.reduce(function(obj, item) {
            obj[item.team] = obj[item.team] || [];
            obj[item.team].push({
                "team_profile_id":item.team_profile_id,
                "player":item.player,
                "player_id":item.player_id
            });
            return obj;
        }, {});

但是没有给出期望的结果

我有一个带有4个键的对象数组:[{“ team”:“ USA”,“ team_profile_id”:“ 10”,“ player”:“ Captain America”,“ player_id”:“ 10X1”},{“团队”:“美国”,“ ...

javascript arrays json object ecmascript-5
6个回答
0
投票

由于结果需要是一个数组,您可以将其用作reduce的初始值,而不是对象:


0
投票

这可能不是最好的方法,但是它可以工作。


0
投票

[当您使用Array.reduce()迭代玩家,破坏玩家对象,并在玩家的属性和使用传播的团队之间进行分隔。


0
投票

您可以找到对象并添加新的播放器。


0
投票

使用forEach方法,您可以轻松拥有一系列不同的团队。


0
投票

尝试以下操作。首先,我创建一组唯一的团队名称,然后基于该名称过滤数据以获取相关参与者的列表:

© www.soinside.com 2019 - 2024. All rights reserved.