2013-12-06 7 views
0

Моя проблема заключается в том, что я пытаюсь заполнить объект массивами данных, но некоторые из массивов либо не будут правильно установлены, либо исчезнут.Javascript: исчезающие свойства объекта

Я попытался найти ответ, но я ничего не нашел, и я также пробовал отлаживать, но не смог разобраться в сути проблемы.

Функция это происходит в обычай JQuery расширение я работаю, на котором принимает объект в качестве входных данных, содержащий массив «ч»:

Hour = { 
    time: datetime, 
    comment: string 
}; 

код выглядит следующим образом:

(function ($) { 
    $.fn.calendar = function(data){ 

    var times={}; 
    var debugging = {}; 
    var x = 0; 

    data.hours.forEach(function(hour){ 
     //Transform hours.time into 1-7 day of the week 
     //and 0-23 hour of the day 
     //Save comments and timestamp to times[day][hour]; 
     var entry = new Date(hour.time);    
     var clockedTime = entry.toTimeString().match(/^([0-9]{2}:[0-9]{2}:[0-9]{2})/)[0]; 
     times[entry.getDay()] = {}; 
     times[entry.getDay()][entry.getHours()] = [clockedTime, hour.comment]; 
     debugging[x] = [entry.getDay(), entry.getHours()]; 
     x++; 
    }); 
    console.log(times); 
    console.log(debugging); 

    return this.html(times); 
    }; 
}(jQuery)); 

Консоль вывода:

Object {1: Object, 2: Object, 3: Object, 4: Object} 
Object {0: Array[2], 1: Array[2], 2: Array[2], 3: Array[2], 4: Array[2], 5: Array[2]} 

Таким образом, с выходом, я знаю, что цикл по д ata шесть раз (поскольку объект отладки содержит шесть элементов), но объект времени имеет только четыре записи.

Любые помощь или указатели будут очень признательны.

+2

Я предполагаю, что у вас есть дубликаты для 'entry.getDay()', которые переписывают существующие свойства. –

+0

Это было бы так. У меня есть два предмета за тот же день, но появляется только первое. Разве не возможно иметь, например, отдельные времена [2] [1] и времена [2] [2] записи? –

+0

Правильно, невозможно, иначе как бы вы ссылались на то или другое? –

ответ

2

Вы переписываете свои объекты, когда у вас есть дубликаты значений entry.getDay(). Попробуйте это вместо:

times[entry.getDay()] = times[entry.getDay()] || {}; 
times[entry.getDay()][entry.getHours()] = [clockedTime, hour.comment]; 

Это создаст объект, если свойство не существует, или оставьте его в покое, если оно есть.

+0

Спасибо, это было то, что я упустил. Сейчас кажется глупым, но я просто этого не видел. –

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