Javascript使用键将数组附加到对象中

Javascript使用键将数组附加到对象中,javascript,arrays,object,Javascript,Arrays,Object,我有这样的数据: [{ team: 'Team1', wins: 1, group: GroupA },{ team: 'Team2', wins: 1, group: GroupA },{ team: 'Team3', wins: 1, group: GroupB },{ team: 'Team4', wins: 1, group: GroupB }] 我希望它以这种形式出现(我基本上希望按某个值对数据进行分组,

我有这样的数据:

[{ team: 'Team1',
     wins: 1,
     group: GroupA
},{ team: 'Team2',
     wins: 1,
     group: GroupA
},{ team: 'Team3',
     wins: 1,
     group: GroupB
},{ team: 'Team4',
     wins: 1,
     group: GroupB
}]
我希望它以这种形式出现(我基本上希望按某个值对数据进行分组,在本例中为“group”,并将该值用作数组对象中的键):

我怎样才能做到这一点

下面是我尝试过的,几乎成功了,但返回了对象:

var newStats = {}
     arrTeamStats.map(function(key,idx){

                var arr = [];

                if(newStats[key.group] == undefined) {
                    arr = key;
                    newStats[key.group] = arr;
                } else {
                else {
                    group = key.group;
                    newStats[group].push(key);
                }
           }

您需要
减少
数组以返回
对象

arrTeamStats.reduce(function(h, o) {
  h[o.group] = h[o.group] || []
  h[o.group].push(o)
  return h
}, {})

HTH

您需要
减少
数组以返回
对象

arrTeamStats.reduce(function(h, o) {
  h[o.group] = h[o.group] || []
  h[o.group].push(o)
  return h
}, {})

首先,你误解了
.map()
。它不是通用迭代器,而是用于从现有数组的内容创建新数组

您可以做的只是迭代并在对象定位时向其添加新属性,然后合并内容

var data=[{team:'Team1',wins:1,group:'GroupA},{team:'Team2',wins:1,group:'GroupA},{team:'Team3',wins:1,group:'GroupB},{team:'Team4',wins:1,group:'GroupB}];
var result={};
用于(数据常数){
if(result.hasOwnProperty(o.group))result[o.group].push([o]);
else结果[o.group]=[o]];
}

控制台日志(结果)首先,您误解了
.map()
。它不是通用迭代器,而是用于从现有数组的内容创建新数组

您可以做的只是迭代并在对象定位时向其添加新属性,然后合并内容

var data=[{team:'Team1',wins:1,group:'GroupA},{team:'Team2',wins:1,group:'GroupA},{team:'Team3',wins:1,group:'GroupB},{team:'Team4',wins:1,group:'GroupB}];
var result={};
用于(数据常数){
if(result.hasOwnProperty(o.group))result[o.group].push([o]);
else结果[o.group]=[o]];
}

控制台日志(结果)如果您倾向于使用像Lodash这样的东西,您可以使用
\uu.groupBy
,如下所示:

var input=[{team:'Team1',
胜利:1,
组:'GroupA'
},{团队:'Team2',
胜利:1,
组:'GroupA'
},{团队:'Team3',
胜利:1,
组:'GroupB'
},{团队:'Team4',
胜利:1,
组:'GroupB'
}];
var输出=u.groupBy(输入,'group');
控制台日志(输出)

如果您倾向于使用像Lodash这样的东西,您可以使用
\u.groupBy
如下:

var input=[{team:'Team1',
胜利:1,
组:'GroupA'
},{团队:'Team2',
胜利:1,
组:'GroupA'
},{团队:'Team3',
胜利:1,
组:'GroupB'
},{团队:'Team4',
胜利:1,
组:'GroupB'
}];
var输出=u.groupBy(输入,'group');
控制台日志(输出)

谢谢。我忘了提到我想要一个普通的javascript解决方案。我不介意一些较新的语法,但我也想要简单的语法。习惯的力量。谢谢。我忘了提到我想要一个普通的javascript解决方案。我不介意一些较新的语法,但我也想要简单的语法。习惯的力量。我如何调整这一点来获得{“团队”:[{“团队”:“团队1”,“胜利”:1,“团队”:“团队2”,“胜利”:1,“团队”:“团队A”}],“团队B”:[{“团队”:“团队3”,“胜利”:1,“团队”:“团队B”}],{“团队”:“团队4”,“胜利”:1,“团队”:“团队B”}}@mou maat:这是它目前给出的结果。我看不出有什么不同。你能解释一下你的意思吗?也许很难注意到,但它是不同的。我需要组内元素的单独数组:所以
GroupA:[{element1}],{element2}]
而不是
GroupA:[{element1},{element2}]
哦,我明白了。这不起作用,因为它不是有效的结构。您需要将每个单独的数组包装在一个包含所有数组的数组中<代码>{GroupA:[[{“team”:“Team1”,“wins”:1,“group”:“GroupA”}],{“Team2”,“wins”:1,“GroupA”:“GroupA”}],“GroupB”:…
组A:[{element1}],{element2}],[GroupB:…
我如何调整此项以获得{“GroupA”:[{“team”:“Team1”,“wins”:1,“GroupA”}],{“team”:“Team2”,“wins”:“GroupA”:“:”,{“Team2”,“wins”:“GroupA”}],“GroupB”:[{“team”:“Team3”,“wins”:1,“group”:“GroupB”}],{“team”:“Team4”,“wins”:1,“group”:“GroupB”}]}@Mou maat:这就是它目前给出的结果。我看不出有什么不同。你能解释一下你的意思吗?可能很难注意到,但它是不同的。我需要为组内的元素使用单独的数组:所以
GroupA:[{element1}],{element2}]
而不是
GroupA:[{element1},{element2}]
哦,我明白了。这不起作用,因为它不是一个有效的结构。你需要将每个数组包装成一个包含所有数组的数组。
{“GroupA”:[{“team”:“Team1”,“wins”:1,“group”:“Team2”,“wins”:1,“group”:“GroupA”}],“GroupB”:
GroupA:[{element1}],{element2}],B组:…