How can I group items with same nick value belonging from the same date into a new array(by nick and date) . Am trying the below but it produces the same array am trying to get from.
I want to group data by same user from the same date
var games = {
'2021-12-15': [{
nick: "john",
gameDate: "2015-12-15 12:00:00",
gameName: "bla 1"
}, {
nick: "john",
gameDate: "2015-12-15 12:40:00",
gameName: "bla 2"
}],
'2021-12-16': [{
nick: "nicky",
gameDate: "2016-12-16 12:00:00",
gameName: "bla 3"
}, {
nick: "mike",
gameDate: "2016-12-16 12:00:00",
gameName: "bla 3"
},
{
nick: "mike",
gameDate: "2016-12-16 12:00:00",
gameName: "bla 3"
}
]
}
var a = {};
for (let val in games) {
console.log(val)
for (var i = 0; i < games[val].length; i++) {
var d = games[val][i].gameDate.split(' ')[0];
if (!a[d]) a[d] = [];
a[d].push(games[val][i])
}
}
console.log(a)
Expected output
{
'2021-12-15': [{
nick: "john" {
nick: "john",
gameDate: "2016-12-15 12:00:00",
gameName: "bla 3"
},
{
nick: "john",
gameDate: "2016-12-15 12:30:00",
gameName: "bla 3"
}
}],
'2021-12-16': [{
nick: "mike" {
nick: "mike",
gameDate: "2016-12-16 12:00:00",
gameName: "bla 3"
},
{
nick: "mike",
gameDate: "2016-12-16 12:15:00",
gameName: "bla 3"
}
}]
}
Hard to tell without an exact output format but I think this is what you're after:
const games = {
"2021-12-15": [
{
nick: "john",
gameDate: "2015-12-15 12:00:00",
gameName: "bla 1",
},
{
nick: "john",
gameDate: "2015-12-15 12:40:00",
gameName: "bla 2",
},
],
"2021-12-16": [
{
nick: "nicky",
gameDate: "2016-12-16 12:00:00",
gameName: "bla 3",
},
{
nick: "mike",
gameDate: "2016-12-16 12:00:00",
gameName: "bla 3",
},
{
nick: "mike",
gameDate: "2016-12-16 12:00:00",
gameName: "bla 3",
},
],
};
const result = Object.fromEntries(
Object.entries(games).map(([key, value]) => [
key,
value.reduce(
(acc, cur) => (acc[cur.nick] = [...(acc[cur.nick] || []), cur], acc),
{}
),
])
);
console.log(result);