網站搜尋

javascript - 在一個物件陣列中取最小/最大值


這在 SO 上以及網路上基本上已經被討論爛了。不過我在想是否有辦法利用標準的 min/max 函數來做到以下這件事:

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

你可以對你的 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 第五版規範的一部分,但 Internet Explorer 沒有這個方法,然而你可以輕鬆地包含像 Mozilla Developer Center 上找到的實現版本。