2015-06-02 2 views
2

У меня есть массив пар ключевых значений, и я хотел бы сгруппировать их по дате. gameDate на самом деле похож на «2014-01-01 12:00:00», поэтому я разбиваю его и пытаюсь использовать дату как ключ.Javascript Группа по дате внутри цикла for

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); 

Я «гугл» в течение некоторого времени ... Я думаю, что я пытаюсь получить массив объектов ... но это ближе всего я мог бы получить, и это все еще очень испортило вверх. Я хотел бы сгруппировать все games[i] на основе их даты. Пожалуйста, помогите.

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]); 
     } 
    } 
+1

являются даты действительно отформатирован без дополнения 0 в месяц и день? Если это так, вам нужно разделить на «-» тоже и создать объект даты – mplungjan

+0

@mplungjan Нет, у них есть нули, они поступают из базы данных. Я не думаю, что это важно для вопроса. Я просто написал это быстро в качестве примера – denikov

+0

Вы правы, это не имеет значения. Я потратил некоторое время на то, чтобы ключ объекта был правильной строкой, но кажется, что yyyy-mm-dd в порядке, по крайней мере, в chrome. – mplungjan

ответ

1

Это работает

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)

+0

Я хотел группировать его ежедневно в пары значений ключа, а ключ - это дата '2014 -01-01', '2014-01-02' и т. Д. – denikov

+0

Я получил желаемый результат некоторое время назад. Клянусь, я посмотрел на каждый возможный «массив значений json key», «объект со значениями массивов», «массив объектов» и т. Д. ... не думал, что это будет так сложно. – denikov

1

Попробуйте этот код

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]); 
} 
+0

Это действительно то же, что и я. Я просто убедился, что индекс массива был нечисловой строкой без специальных символов – mplungjan

+0

Это то, что вы хотели получить? Если нет, напишите пример объекта результата ('a'). –

Смежные вопросы