【发布时间】:2014-01-23 14:28:14
【问题描述】:
我有一个包含时间序列数据的数组,如下所示:
var timeseries = [
[Tue Dec 31 2013 00:00:00 GMT+0000 (GMT Standard Time), 3, 2],
[Tue Dec 31 2013 01:00:00 GMT+0000 (GMT Standard Time), 1.2, 3],
[Tue Dec 31 2013 02:00:00 GMT+0000 (GMT Standard Time), 4, 2]
]
嵌套数组中的第一项是 javascript 日期。
我有第二个数组,其中包含一个唯一的 javascript 日期列表,但 timeseries 数组中可能已经存在也可能不存在:
var newTimes = [
Tue Dec 31 2013 00:13:00 GMT+0000 (GMT Standard Time),
Tue Dec 31 2013 01:00:00 GMT+0000 (GMT Standard Time),
Tue Dec 31 2013 01:40:00 GMT+0000 (GMT Standard Time)
]
对于 newTimes 数组中的每个项目,我需要检查该日期是否存在于与 timeseries 数组一起存储的数组中。如果没有,我想在时间序列数组的正确位置(时间顺序)插入一个新数组,并且 - 至关重要的是 - 从前面的数组中复制其他数组值。例如,按照描述组合上述两个数组将产生:
var newTimeseries = [
[Tue Dec 31 2013 00:00:00 GMT+0000 (GMT Standard Time), 3, 2],
[Tue Dec 31 2013 00:13:00 GMT+0000 (GMT Standard Time), 3, 2],
[Tue Dec 31 2013 01:00:00 GMT+0000 (GMT Standard Time), 1.2, 3],
[Tue Dec 31 2013 01:40:00 GMT+0000 (GMT Standard Time), 1.2, 3],
[Tue Dec 31 2013 02:00:00 GMT+0000 (GMT Standard Time), 4, 2]
]
我应该注意两个数组都已经排序。此外,newTimes 中的项目将存在于 timeseries 的范围内。最后,原始 timeseries 数组每小时都有一个条目,在整点。
我尝试了几种不同的方法,但我对计算效率最高的方法很感兴趣。如果有帮助,我很乐意使用任何适当的、被广泛采用的第三方库,例如 underscore.js。
【问题讨论】:
-
想到一个链表...
-
嗯,一个链表会给你
O(1)的插入复杂度和O(n)的搜索复杂度。我想你会发现“最有效”取决于你命中/未命中的频率。 -
根据列表大小,您可能会插入所有内容,然后遍历列表一次以复制额外数据或删除双重条目。只是在这里集思广益:)
-
在数组中存储 unix 时间戳而不是日期对象,我想这将有助于加快速度(在查找要插入的正确位置时)
-
列表的大小会有所不同。通常的用例范围可能是 150 个条目,最多约 4000 个
标签: javascript jquery arrays performance