跨对象数组的最小值/最大值

时间:2010-03-13 17:27:57

标签: javascript

在SO和周围的网络上已经完成了死亡。但是我想知道是否有办法利用标准的最小/最大函数:

Array.max = function(array) {
    return Math.max.apply(Math, array);
};

Array.min = function(array) {
    return Math.min.apply(Math, array);
};

所以我可以搜索一系列对象:

function Vector(x, y, z) { this.x = x; this.y = y; this.z = z; }
var ArrayVector = [ /* lots of data */ ];
var min_x = ArrayVector.x.min(); // or
var max_y = ArrayVector["y"].max();

目前,我必须遍历数组并手动比较对象值,并根据循环的特定需要制作每个对象值。更通用的方式会很好(如果稍慢)。

1 个答案:

答案 0 :(得分:7)

您可以对Array.minmax方法进行一些更改以接受属性名称,在Array.prototype.map的帮助下提取数组中每个对象的属性,以及这些提取值的最大值或最小值:

Array.maxProp = function (array, prop) {
  var values = array.map(function (el) {
    return el[prop];
  });
  return Math.max.apply(Math, values);
};

var max_x = Array.maxProp(ArrayVector, 'x');

我只想提一下,几乎所有现代浏览器都可以使用Array.prototype.map方法,它是ECMAScript 5th Edition Specification的一部分,但是Internet Explorer没有它,但是你很容易包括Mozilla Developer Center上的实现。