Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:正在消失的对象属性_Javascript_Jquery_Arrays_Object - Fatal编程技术网

Javascript:正在消失的对象属性

Javascript:正在消失的对象属性,javascript,jquery,arrays,object,Javascript,Jquery,Arrays,Object,我的问题是,我试图用数据数组填充对象,但有些数组设置不正确或消失了 我尝试过寻找答案,但没有找到任何答案,我也尝试过调试,但无法找到问题的根源 发生这种情况的函数是我一直在使用的自定义jQuery扩展,它将对象作为包含“hours”数组的输入: Hour = { time: datetime, comment: string }; 代码如下: (function ( $ ) { $.fn.calendar = function(data){ var times={

我的问题是,我试图用数据数组填充对象,但有些数组设置不正确或消失了

我尝试过寻找答案,但没有找到任何答案,我也尝试过调试,但无法找到问题的根源

发生这种情况的函数是我一直在使用的自定义jQuery扩展,它将对象作为包含“hours”数组的输入:

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]}
因此,从输出中,我知道它在数据中循环了六次(因为调试对象包含六项),但是times对象只有四个条目


如果您有重复的
entry.getDay()
值,您将覆盖您的属性,我们将不胜感激。请尝试以下方法:

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

如果属性不存在,则会创建一个对象,如果属性存在,则不创建对象。

我假设您有重复的
entry.getDay()
覆盖现有属性。就是这样。我在同一天有两个项目,但只有第一个出现。例如,不可能有不同的时间[2][1]和时间[2][2]条目吗?正确,不可能,否则您将如何引用其中一个?谢谢,这是我忽略的。现在看起来很傻,但我就是没看到。