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组:…