2016-10-20 2 views
0

Lassen Sie uns sagen, dass ich eine beliebig große Anzahl von Objekten:Vergleicht Eigenschaften und der Rückkehr verbunden sind Geschwister

obj1 = { 
    name: "Fred", 
    score: 1 
} 

obj2 = { 
    name: "Steve", 
    score: 2 
} 

obj3 = { 
    name: "Billy", 
    score: 3 
} 

ich leicht möchten die score Eigenschaften jedes dieser Objekte vergleichen, und dann wieder die name Eigentum das Objekt mit der höchsten Punktzahl. Ich bin mir nicht ganz sicher, wie ich leicht den höchsten Wert einer beliebig großen Gruppe von Zahlen finden kann, aber ich bin mir sicher, dass ich es herausfinden werde, wenn die Zeit kommt. Meine eigentliche Frage ist, wie man nach dem Finden der höchsten Punktzahl den Namen zurückgibt, der mit dem Elternobjekt dieser Punktzahl verknüpft ist. (Im Fall der Zeit sollte mein Programm alle höchsten Werte zurückgeben.)

+0

Haben Sie jQuery zur Verfügung haben? Was passiert, wenn mehr als eine Person die gleiche Punktzahl hat? – AndreFeijo

+0

_ "Meine eigentliche Frage ist, wie man nach dem Finden der höchsten Punktzahl den Namen" _ zurückgibt, indem man die Eigenschaft 'name' des Objekts zurückgibt, dh:' obj.name' –

+0

@PatrickEvans Nun ja, aber ich tue es nicht unbedingt den Namen dieser Objekte kennen. Ich muss den Namen meines Objekts irgendwie konservieren, nachdem ich eine große Anzahl von Punkten ausgewertet habe. – Ucenna

Antwort

2

Hier ist eine Lösung mit Array.prototype.reduce.

JSBIN:

http://jsbin.com/cepofigomu/edit?html,js,console,output

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

var data = [ 
    { 
    name: "Fred", 
    score: 1 
    }, 
    { 
    name: "Steve", 
    score: 2 
    }, 
    { 
    name: "Billy", 
    score: 3 
    } 
]; 

var out = data.reduce(function(a, b){ 
    return a.score > b.score ? a:b ; 
}, {}); 

console.log(out); 
+0

Dies wird nur 1 Person im Falle eines Unentschiedens zurückgeben. – AndreFeijo

0

Leider habe ich nur gelesen nicht haben jQuery verfügbar, nachdem ich ein Beispiel fertig zu schreiben. Sie sollten in der Lage sein, es jedoch in reines Javascript zu übersetzen.

https://jsfiddle.net/q2x9phf5/

var scores = []; 

scores.push({ 
    name: "Fred", 
    score: 1 
}); 

scores.push({ 
    name: "Steve", 
    score: 2 
}); 

scores.push({ 
    name: "Billy", 
    score: 3 
}); 

var highestScore = 0; 

$.each(scores, function(index, person) { 
    highestScore = Math.max(highestScore, person.score); 
}); 

var peopleWithHighestScore = $.grep(scores, function(person) { 
    return person.score === highestScore; 
}); 
Verwandte Themen