【发布时间】:2018-06-05 08:59:46
【问题描述】:
我正在处理一个“events”数组,其中数组的key 是事件的Unix Timestamp。换句话说,假设我们在 JS 中有以下 event 对象数组:
var MyEventsArray=[];
MyEventsArray[1513957775]={lat:40.671978333333, lng:14.778661666667, eventcode:46};
MyEventsArray[1513957845]={lat:40.674568332333, lng:14.568661645667, eventcode:23};
MyEventsArray[1513957932]={lat:41.674568332333, lng:13.568661645667, eventcode:133};
and so on for thousands rows...
数据通过 Ajax 调用发送并在 JSON 中编码以使用 JS 进行处理。收到数据集后,我有另一个 Unix 时间戳,比如说 1513957845,来自另一个来源,我想找到当时发生的事件......这很容易我只需要从具有给定索引(上面列表中的第二个)。 现在的问题是:想象一下没有找到给定的索引(假设我们正在寻找 UXTimestamp=1513957855)并且这个索引在数组中不存在但我想取最近的索引(在上面的示例我将采用元素 MyEventsArray[1513957845],因为它的索引 1513957845 最接近 1513957855)。我该怎么做才能获得这个结果? 我的困难在于处理数组索引,因为当我收到数组时我不知道索引从哪里开始。
机器将如何处理这种情况? 机器是否会为放置在每行之间的虚拟/空元素分配(和浪费)内存,或者编译器是否有某种能力来构建自己的索引并优化空间?换句话说:像我们正在做的那样使用索引是否安全,或者最好将数组分配为:
var MyEventsArray=[];
MyEventsArray['1513957775']={lat:40.671978333333, lng:14.778661666667, eventcode:46};
MyEventsArray['1513957845']={lat:40.674568332333, lng:14.568661645667, eventcode:23};
MyEventsArray['1513957932']={lat:41.674568332333, lng:13.568661645667, eventcode:133};
and so on for thousands rows...
在这种情况下,键和索引明显不同,因此尽管我们不知道键值,但可以使用 MyArray[0] 获取第一个元素。这种方法在内存方面是否更昂贵(这里我们必须保存索引和键)还是编译器的效果相同?
【问题讨论】:
标签: javascript arrays json ajax associative-array