我觉得这是重复的和/或效率低下的:
self.get_max_dist = function(array) {
var arr = array.map(function(value) {
return value.distance;
});
var max = Math.max.apply(null, arr);
return array.filter(function(el) {
return el.distance === max;
});
};
如何消除感觉?
示例数组:
[
{
distance: 256.62,
maxspeed: 340.65,
pid: "675",
prestrafe: 275.626
},
...
]
答案 0 :(得分:2)
执行效率可能来自于通过数组而不是代码中的三遍。这是一个通过的解决方案:
self.get_max_dist = function(array) {
var output = [], max = 0, item;
for (var i = 0; i < array.length; i++) {
item = array[i];
if (item.distance > max) {
// new max value so initialize
// output starting with this item
output = [item];
max = item.distance;
} else if (item.distance === max) {
// found another item with our max value
// so add it to the current output
output.push(item);
}
}
return output;
}
为了简化编码,这假设距离不是负的。如果你不想要这个假设,可以添加几行代码来处理它。
如果您只想获得一个最大距离项目,那么您可以更简单一点:
self.get_max_dist = function(array) {
var max, item;
for (var i = 0; i < array.length; i++) {
item = array[i];
if (!max || (item.distance > max.distance)) {
max = item;
}
}
return max;
}
或者,如果您喜欢迭代器,最后一个可以是:
self.get_max_dist = function(array) {
var max;
array.foreach(function(item) {
if (!max || (item.distance > max.distance)) {
max = item;
}
});
return max;
}