2010-03-13 18 views
6

Neredeyse ölüm için yapıldı, burada SO ve 'Net. Standart min kaldıraç için bir yol olup olmadığını ancak merak ediyorum/maksimum fonksiyonları: ŞuNesnelerin bir dizisi boyunca Min/Max

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(); 

Ben döngü vardır:

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

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

Yani söz hakkından ait nesneler dizisi arama yapabilirsiniz dizi boyunca ve nesne değerlerini manuel olarak karşılaştırıp her birini döngünün özel ihtiyacına göre düzenleyin. Daha genel bir amaç daha iyi olurdu (biraz daha yavaşsa).

cevap

6

Sen, bir özellik ismi kabul olanlar çıkarılan değerlerin Array.prototype.map yardımıyla ve max veya min değeri ile, dizideki her nesnenin o mülkü ayıklamak için Array.min ve max yöntemlerle bazı değişiklikler yapabiliriz:

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'); 

sadece Array.prototype.map yöntem hemen hemen tüm modern tarayıcılarda kullanılabilir olacağını belirtmek istiyorum ve bunun ECMAScript 5th Edition Specification parçasıdır, ancak Internet Explorer bu yok, ancak bulduğu gibi bir uygulama içermektedir kolayca yapabilirsiniz Mozilla Developer Center üzerinde.

+0

Bu oldukça zarif bir çözümdür. Yeni bir geçici dizi oluşturduğunu görebiliyorum, bu yüzden muhtemelen onu önbelleğe almam ya da idareci kullanmam gerekecek. –

İlgili konular