2012-06-05 10 views
7

Ho una matrice di un oggetto JavaScript personalizzato che ha una proprietà denominata order. Ho una matrice di questo oggetto, e voglio ottenere l'oggetto con il più alto "ordine".Ottieni l'elemento nell'array con il valore massimo di una proprietà utilizzando jQuery

Dal momento che sono relativamente nuovo per jQuery, e provenienti da un background C# questo è uno dei casi in cui vivamente apprezzo LINQ :)

Comunque, per farla breve, ho controllato il seguendo i collegamenti ma restituiscono solo il valore e non un riferimento dell'elemento stesso dell'array ... Quindi un piccolo aiuto nel cambiare quello per restituire l'elemento sarebbe apprezzato.

jQuery min/max property from array of elements

element with the max height from a set of elements

L'oggetto personalizzato in questione (che ho una serie di) è la seguente:

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

Dacci un codice completo di quello che hai o un jsfiddle.net demo. L'ordinamento – gdoron

risposta

8

Forse hai sbagliato ... ma è quello che stai cercando?

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

provo questo:

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

è costoso per trovare il valore massimo. Stai facendo più operazioni di quelle necessarie. – epascarello

+0

La tua funzione di ordinamento non sta restituendo nulla, e per ottenere il valore più alto all'indice '0', dovresti fare il meno del confronto' <', sebbene la sottrazione sarebbe meglio. 'b [valore] - un [valore]' –

+0

@amnotiam - grazie per il commento. ho risolto la mia risposta –

0

Ordina array e pop l'ultimo oggetto in ordine di

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() sarà ordinare in ascendente in ordine decrescente. vale anche per gli array 2D.

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)))] 
 
)