gpt4 book ai didi

javascript - 查找最接近的数组索引

转载 作者:行者123 更新时间:2023-11-29 10:04:00 24 4
gpt4 key购买 nike

我正在处理“事件”数组,其中数组的 是事件的 Unix 时间戳。换句话说,假设我们在 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] 获取第一个元素。这种方法在内存方面是否更昂贵(这里我们必须保存索引和键),还是对编译器的效果相同?

最佳答案

MyEventsArray[1513957775]MyEventsArray['1513957775'] 没有区别。在深处,数组索引只是属性名称,而属性名称是字符串。

关于这些稀疏索引是否会导致分配数百万个空单元格的问题,不,那不会发生。稀疏数组只存储您放入其中的内容,而不是空白空间。

如果你想快速找到一个键,你可以获取一个键的数组,对它们进行排序,然后找到你想要的:

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

var target = 1513957855;

var closest= Object.keys(MyEventsArray)
.map(k => ({ k, delta: Math.abs(target - k) }))
.sort((a, b) => a.delta - b.delta)[0].k;

console.log(closest);

关于javascript - 查找最接近的数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47946035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com