2012-06-05 23 views
7

Tengo una matriz de un objeto JavaScript personalizado que tiene una propiedad llamada order. Tengo una matriz de este objeto, y quiero obtener el artículo con el "orden" más alto.Obtener el elemento en la matriz con el valor máximo de una propiedad usando jQuery

Ya que soy relativamente nuevo en jQuery, y procedentes de un fondo de C# este es uno de los casos en los que aprecio altamente LINQ :)

De todos modos, para cortar una larga historia corta, he comprobado el siguiendo los enlaces, pero solo devuelven el valor y no una referencia del elemento de la matriz en sí ... Así que sería muy útil una pequeña ayuda para cambiar eso y devolver el elemento.

jQuery min/max property from array of elements

element with the max height from a set of elements

El objeto personalizado en cuestión (que no tengo una serie de) es la siguiente:

var severity = function (key, value, order) { 
    this.key = key; 
    this.value = value; 
    this.order = order; 
}; 
+0

darnos un código completo de lo que tiene o una demostración jsfiddle.net. – gdoron

Respuesta

8

Tal vez te equivoqué ... pero ¿es eso lo que estás buscando?

function getHighest(array) { 
    var max = {}; 
    for (var i = 0; i < array.length; i++) { 
     if (array[i].order > (max.order || 0)) 
      max = array[i]; 
    } 
    return max; 
} 

// var array = [object, object, object ...]; 
var highest = getHighest(array); 

DEMO:http://jsfiddle.net/c6gfj/

-1

intento esto:

function getHighest(array, value){ 
    return array.sort(function(a,b){ b[value] - a[value] })[0]; 
} 
+1

es costoso encontrar el valor máximo. Estás haciendo más operaciones de las necesarias. – epascarello

+0

Su función de clasificación no devuelve nada, y para obtener el valor más alto en el índice '0', tendría que hacer menos que la comparación' <', aunque la resta sería mejor. 'b [value] - a [value]' –

+0

@amnotiam - gracias por el comentario. arregló mi respuesta. –

0

Ordenar un array y hacer estallar el último objeto de matriz

function sortObj(a, b){ 
    return a.order < b.order ? 0 : 1; 
} 
obj.sort(sortObj) 
var highest =obj.pop(); 

DEMO:. http://jsfiddle.net/VaYNb/

0

uso yourarray.sort() se clasificará en ascendiendo a orden descendente. Es válido también para matrices de 2-D.

0
array[array.map((o)=>o.order).indexOf(Math.max(...array.map((o)=>o.order)))] 

DEMO:

let array=[{order:3},{order:5},{order:2},{order:2}]; 
 

 
console.log(
 
    array[array.map((o)=>o.order).indexOf(Math.max(...array.map((o)=>o.order)))] 
 
)

Cuestiones relacionadas