2010-03-13 5 views
6

SO와 'Net'에서 거의 끝내 버렸습니다. 표준 분을 활용할 수있는 방법이 있다면하지만 궁금 해서요 /의 최대 기능 : 현재오브젝트 배열 전체에 걸친 최소/최대

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

내가 루프가 :

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

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

그래서 나는 말의 객체의 배열을 통해 검색 할 수 있습니다 배열을 통해 객체 값을 수동으로 비교하고 각 객체를 루프의 특정 필요성에 맞추십시오. 좀 더 일반적인 목적의 방법은 좋을 것입니다 (약간 느린 경우).

답변

6

당신은 속성 이름을 사용하는 추출 된 값의 Array.prototype.map의 도움, 그리고 최대 또는 최소 값으로, 배열의 각 개체의 속성을 추출하여 Array.minmax 방법을 일부 변경을 할 수 있습니다 :

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의 한 부분이지만, 인터넷 익스플로러가없는, 그러나 당신은 발견 등의 구현을 포함 쉽게 할 수 있습니다 Mozilla Developer Center

+0

꽤 멋진 해결책입니다. 나는 새로운 임시 배열을 생성하는 것을 볼 수있을 것이므로 아마도 그것을 캐시하거나 아껴서 사용해야 할 것입니다. –