【发布时间】:2018-07-14 14:05:01
【问题描述】:
考虑以下 javascript 数据结构:
let sensors = {
sensor1: {
min: 1.00,
max: 9.00,
data: [
{
timestamp: 1517760374400,
value: 1.00
},
{
timestamp: 1517760374500,
value: 2.00
},
{
timestamp: 1517760374600,
value: 9.00
},
{
timestamp: 1517760374700,
value: 1.00
},
{
timestamp: 1517760374800,
value: 3.00
},
{
timestamp: 1517760374900,
value: 1.00
},
{
timestamp: 1517760375000,
value: 9.00
},
{
timestamp: 1517760375100,
value: 8.00
},
]
},
// sensor2, sensor3, etc...
}
想象一下,每个传感器可能有数千个带时间戳的数据。
最初你可以很容易地设置一个最小值/最大值,每次添加一个对象时,通过检查它是大于还是小于当前最大值
但棘手的部分和我的问题是:
数组的大小是有限的 - 在这种情况下,我们会将其设置为 8 的长度。
每当第 8 项之后的新项被添加(达到限制),第 1 项将被删除,第 n 项将被推入数组的末尾。
问题是可以有更多具有相同值的项目,即使没有,如果不再次迭代整个数组,我们也无法知道下一个最小值/最大值
这应该可以扩展到数千个数组项目,并且在理想情况下大约每秒运行一次 - cpu 利用率尽可能低 - 我真的不认为每秒循环数千个项目会足够有效.
您是否看到另一种跟踪数组的最小值/最大值的方法,该数组每秒都在变化?
【问题讨论】:
-
也许你需要这样的东西:stackoverflow.com/questions/12190184/…
-
只有当删除的项目包含最小值或最大值时,才需要重新计算最小值或最大值,并且只有在需要时(意味着它可以保留为
undefined,直到需要该值)
标签: javascript algorithm