denikov
denikov

Reputation: 869

Javascript Group by date inside a for loop

I have an array of key value pairs and I would like to group it together based on date. The gameDate is actually like "2014-01-01 12:00:00" so I'm splitting it and trying to use the date as key.

var a = {};
(function() {
    for (var i = 0; i < games.length; i++) {
        if (a[games[i]['gameDate'].split(' ')[0]]) {
            var b = [];
            b = [a[games[i]['gameDate'].split(' ')[0]]];
            b.push(games[i]);
            a[games[i]['gameDate'].split(' ')[0]] = b;
        }else {
            a[games[i]['gameDate'].split(' ')[0]] = games[i];
        }
    }
})();
console.log(a);

I've "googled" for quite some time...I think what I'm trying to get is an array of objects...but this is the closest I could get and it's still very messed up. I would like to group all games[i] based on their date. Please help out.

for (var i = 0; i < games.length; i++) {
        if ([games[i]['gameDate'].split(' ')[0]] in a) {
            var b = [];
            b = a[games[i]['gameDate'].split(' ')[0]];
            b.push(games[i]);
            a[games[i]['gameDate'].split(' ')[0]] = b;
        }else {
            a[games[i]['gameDate'].split(' ')[0]] = [];
            a[games[i]['gameDate'].split(' ')[0]].push(games[i]);
        }
    }

Upvotes: 2

Views: 3315

Answers (2)

mplungjan
mplungjan

Reputation: 177685

This works

var games = [{
  gameDate: "2015-01-01 12:00:00",
  gameName: "bla 1"}, {
  gameDate: "2015-01-02 12:00:00",
  gameName: "bla 2"}, {
  gameDate: "2015-01-02 12:00:00",
  gameName: "bla 3"} ]
// ----------


var a = {};
for (var i=0; i < games.length;i++) {
  var d = games[i]['gameDate'].split(' ')[0];
  if (!a[d]) a[d] = [];
  a[d].push(games[i]);
}
console.log(a)

// this one destroys the original array but uses proper strings as keys

var a = {};
while (games.length) {
  var dateString = games[0]['gameDate'].split(' ')[0].replace(/-/g, "");
  if (!a["d" + dateString]) {
    a["d" + dateString] = [];
  }
  a["d" + dateString].push(games.shift());
}
console.log(a)

Upvotes: 1

Try this code

for (var i = 0; i < games.length; i++) {
    var date = games[i]['gameDate'].split(' ')[0];
    if (!a[date]) {
        a[date] = [];
    }
    a[date].push(games[i]);
}

Upvotes: 1

Related Questions