2015-04-21 6 views
0

Я хочу сохранить значения массива в словаре js (для каждого ключа даты есть массив объектов для этой даты). Возможно ли это? а если нет, то что это лучший способ сделать это? это данные (извлекается из JSON):Как сохранить значение массива в словаре javascript?

[ 
    { 
    "date":"2015-02-08", 
    "hour":6, 
    "mac_address":"0C:3E:9F:60:53:32", 
    "is_inside":"0" 
    }, 
    { 
    "date":"2015-02-08", 
    "hour":6, 
    "mac_address":"40:0E:85:52:68:4E", 
    "is_inside":"0" 
    }, 
    { 
    "date":"2015-02-08", 
    "hour":6, 
    "mac_address":"60:F8:1D:DB:E4:A0", 
    "is_inside":"0" 
    } 
] 

Я попытался следующие, но это только делает длинное значение одной строки.

for (var i=0; i<data.length; i++){ 
    usersByDay[data[i].date] += data[i]; 
    } 

Что я могу сделать, чтобы сделать структуру данных, например, так:

{date: [object, object, object], another_date: [object...]}, i.e: 

{"2015-02-08": [ 
    { 
    "date":"2015-02-08", 
    "hour":6, 
    "mac_address":"0C:3E:9F:60:53:32", 
    "is_inside":"0" }, 
    { 
    "date":"2015-02-08", 
    "hour":6, 
    "mac_address":"40:0E:85:52:68:4E", 
    "is_inside":"0" }] 
    } 
+1

Почему существует '+ = 'вместо того, чтобы просто' = '? – alex

+1

Вы ищете 'usersByDay [data [i] .date] .push (data [i])'? Не могу сказать. Изучите основы массивов из учебника: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array –

+0

Нет. Я имел в виду нечто иное. Я обновил свой вопрос, надеюсь, теперь это яснее. Благодаря! –

ответ

2

+= не выталкивает значения в массив в JavaScript, но push делает! Вам также необходимо проверить, существует ли ключ, и создать новый массив, если это не так.

for (var i = 0; i < data.length; i++) { 
    var item = data[i]; 

    if (usersByDay[item.date]) { 
     usersByDay[item.date].push(item); 
    } else { 
     usersByDay[item.date] = [item]; 
    } 
} 

Или, если вам нравится «крутость»:

for (var i = 0; i < data.length; i++) { 
    var item = data[i]; 

    (usersByDay[item.date] || (usersByDay[item.date] = [])).push(item); 
} 
+0

Я обновил свой вопрос, теперь это более понятно. –

+0

@AlonWeissfeld: Хорошо, этот ответ по-прежнему применяется. – Ryan

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