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

gra*_*eds 6 javascript

它已经完成了死亡,在SO和围绕'网络.但是我想知道是否有办法利用标准的最小/最大功能:

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

Array.min = function(array) {
    return Math.min.apply(Math, array);
};
Run Code Online (Sandbox Code Playgroud)

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

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();
Run Code Online (Sandbox Code Playgroud)

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

CMS*_*CMS 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');
Run Code Online (Sandbox Code Playgroud)

我只想提一下,该Array.prototype.map方法几乎可以在所有现代浏览器上使用,它是ECMAScript第5版规范的一部分,但是Internet Explorer没有它,但是你可以很容易地包含像Mozilla上的实现一样的实现.开发者中心.