Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Arrays_Associative Array - Fatal编程技术网

Javascript:以时间戳为键的数组

Javascript:以时间戳为键的数组,javascript,arrays,associative-array,Javascript,Arrays,Associative Array,我想要一个数组,时间戳作为键,数字作为值。通过这种方式,我想跟踪有多少辆车进入或离开了停车场,以及有多少辆车同时停在停车场 基本知识: -获取包含每个事务的输入日期和退出日期的停车操作列表 -将所有这些日期放入一个数组,时间戳作为键,如果输入日期,则+=1,退出日期为-=1 -按日期排序 -检查排序数组并添加到计数器,跟踪是否达到新的最大值 var result = []; var counter = 0; var max = 0; //SELECT enter

我想要一个数组,时间戳作为键,数字作为值。通过这种方式,我想跟踪有多少辆车进入或离开了停车场,以及有多少辆车同时停在停车场

基本知识: -获取包含每个事务的输入日期和退出日期的停车操作列表 -将所有这些日期放入一个数组,时间戳作为键,如果输入日期,则+=1,退出日期为-=1 -按日期排序 -检查排序数组并添加到计数器,跟踪是否达到新的最大值

    var result = [];
    var counter = 0;
    var max = 0;

    //SELECT enterTS, exitTS FROM parking;
    // validated, that works

    while (!rs.eof) {   
        var es = rs.fields(1).toString();
        var dd = rs.fields(2).toString();

        result[es] += 1;     //might happen at the same time with exit or other entries
        result[dd] -= 1;
        alert('Start' + es); //correct timestamp
        alert('Array' + result[es]); //shows NaN
    }

    result.sort();

    for (var key in result) {            
          counter += result[key];

          if(counter > max){
               max = counter;
          }
    }
谢谢你的帮助。我知道这不是一个有效的代码片段,但如果没有数据连接,这是很棘手的。我已经尝试过关联数组,但无法理解如何在本例中使用关联数组

再次感谢,
fj

使用对象,而不是数组

var result = {};
现在要填充它,您可以:

result[es] = result[es] + 1 || 1
您的
for…in
循环应该可以工作(但为了理智起见,您应该使用
.hasOwnProperty

您的
NaN
结果之所以出现,是因为您正在执行以下操作:

result[es] += 1;

由于
result[es]
是未定义的(因为您从未给它赋值),
undefined+1
NaN
(不是数字)。

您不能使用字符串作为数组的索引;这相当于将数组用作对象。即使可以,逻辑也是错误的,因为对数组排序是对值排序,而不是对索引排序

我建议您创建一个停车事件对象数组,并使用自定义比较函数对其进行排序。类似这样(未经测试):


还要检查
.hasOwnProperty
@domokun:True,我编辑了答案以包含它。我不想混淆这个问题,但值得一提的是,如果没有更多的工作,这将无法完成工作,因为您无法对对象键进行排序。在结果中使用
var键进行迭代
将不会以正确的顺序生成值。@TedHopp:在需要时将对象转换为排序数组是相当简单的。这真的取决于什么更重要。排序性能或查找性能。OP似乎正在努力解决的问题是找到同时停放的最大车辆数。你的代码不能做到这一点。我不认为将对象转换成一个排序数组来完成这项工作是“微不足道的”,但是,这并不是“键控”过时的。查找特定日期的条目将更加困难(尽管排序会有所帮助)。OP并没有真正提供足够的上下文来确定这可能有多重要。@MattBurland-在OP的问题中,目标是计算有多少停车事件(一个小问题,因为这只是检索到的记录数),并找到同时停车的最大数量。如果按日期查找很重要,则需要另一个数据结构(或者,更可能的情况是,只需查找此算法的数据来自的底层数据库)。
result[es] += 1;
var result = [];
var counter = 0;
var max = 0;

//SELECT enterTS, exitTS FROM parking;
// validated, that works

while (!rs.eof) {   
    var es = rs.fields(1).toString();
    var dd = rs.fields(2).toString(); // I'm assuming this is the exit time

    // create two events: one for entry and one for exit
    result.push({time: es, change: 1});
    result.push({time: dd, change: -1});
}

// sort based on event time
result.sort(function(a, b){ return a.time.localeCompare(b.time); });

// scan events, tracking current parking population
for (var key in result) {         
      counter += result[key].change;

      if(counter > max){
           max = counter;
      }
}