在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();
目前,我必须遍历数组并手动比较对象值,并根据循环的特定需要制作每个对象值。更通用的方式会很好(如果稍慢)。
答案 0 :(得分:7)
您可以对Array.min
和max
方法进行一些更改以接受属性名称,在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上的实现。