繁体   English   中英

Javascript:带有Timestamp作为键的数组

[英]Javascript: Array with Timestamp as keys

我想有一个数组,时间戳作为键,数字作为值。 通过这种方式,我想跟踪已经进入或离开停车场的汽车数量,以及同时停放在停车场的汽车数量。

基础知识: - 获取每个交易的输入日期和退出日期的停车操作列表 - 将所有这些日期记录到一个数组中,时间戳为关键字,+ = 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来保持理智)。

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

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

你的NaN结果是因为你这样做:

result[es] += 1;

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM