Если вы хотите, чтобы это сделать старомодным способом:
function arrayMax(arr, key){
var m = -Infinity,
cur,
i;
for(i=0; i<arr.length; i++){
cur = arr[i][key]
if(cur > m){
m = cur;
}
}
return m;
}
Эта функция принимает массив объектов в качестве первого аргумента, а ключ - второй. Он выполняет итерацию по массиву и возвращает наибольшее значение, найденное для данного ключа.
В вашем случае, вы могли бы назвать это так:
var maximum = arrayMax(myArr, "x");
Обратите внимание, что, в отличие от Math.max, это устойчивость к случаю, когда один (или более) объектов не имеет этот ключ определены, так что:
arrayMax([{y:200}, {x:100, y:100}, {x:300, y:400}], "x");
вернется 300
, в то время как Math.max
возвращается NaN
(на Google Chrome, по крайней мере). Худший сценарий (ни один из объектов не имеет ключа), функция arrayMax
возвращает -Infintity
.
Если вы хотите, чтобы вернуть объект, который имеет наибольшее значение, вместо того, чтобы просто возвращая значение, вы можете легко изменить функцию сделать так:
function arrayMax(arr, key){
var m = -Infinity,
o = null,
cur,
curv,
i;
for(i=0; i<arr.length; i++){
cur = arr[i]
curv = cur[key]
if(curv > m){
m = curv;
o = cur;
}
}
return o;
}
Это было давно и, очевидно, тогда Я принял ответ, который я понял легче (тот, который был принят прямо сейчас), но из числа повышений видно, что ваше решение является предпочтительным. Не могли бы вы объяснить, почему? – Taurus
@Taurus well Я бы предположил, что это потому, что это намного более красноречиво. Однако это не делает ничего принципиально другого. – Pointy