I have an object in javascript like this:
{ "a":4, "b":0.5 , "c":0.35, "d":5 }
有没有一种快速的方法可以在不必遍历所有属性的情况下获得属性的最小值和最大值?因为我有一个巨大的物体,我需要每两秒钟得到最小/最大值.(对象的值不断变化).
I have an object in javascript like this:
{ "a":4, "b":0.5 , "c":0.35, "d":5 }
有没有一种快速的方法可以在不必遍历所有属性的情况下获得属性的最小值和最大值?因为我有一个巨大的物体,我需要每两秒钟得到最小/最大值.(对象的值不断变化).
There's no way to find the maximum / minimum in the general case without looping through all the n elements (if you go from, 1 to n-1, how do you know whether the element n isn't larger (or smaller) than the current max/min)?
您提到,这些值每隔几秒钟就会改变一次.如果您确切知道哪些值发生了更改,可以从以前的最大/最小值开始,只与新值进行比较,但即使在这种情况下,如果修改的其中一个值是旧的最大/最小值,您可能需要再次循环它们.
另一种 Select ——同样,只有在更改的值数量很小的情况下——是将值存储在树或堆等 struct 中,当新值到达时,您会适当地插入(或更新)它们.但根据你的问题,你能否做到这一点尚不清楚.
如果希望在循环遍历所有元素的同时获得给定列表的最大/最小元素,那么可以使用下面的代码段,但如果不遍历所有元素,就无法实现这一点
var list = { "a":4, "b":0.5 , "c":0.35, "d":5 };
var keys = Object.keys(list);
var min = list[keys[0]]; // ignoring case of empty list for conciseness
var max = list[keys[0]];
var i;
for (i = 1; i < keys.length; i++) {
var value = list[keys[i]];
if (value < min) min = value;
if (value > max) max = value;
}