Ich suche nach einer wirklich schnellen, sauberen und effizienten Methode, um den maximalen "y" -Wert im folgenden JSON-Slice zu erhalten:
[
{
"x": "8/11/2009",
"y": 0.026572007
},
{
"x": "8/12/2009",
"y": 0.025057454
},
{
"x": "8/13/2009",
"y": 0.024530916
},
{
"x": "8/14/2009",
"y": 0.031004457
}
]
Ist eine for-Schleife der einzige Weg, dies zu tun? Ich bin daran interessiert, es irgendwie zu benutzen Math.max
.
javascript
json
Rio
quelle
quelle
Antworten:
So finden Sie den Maximalwert
y
der Objekte inarray
:quelle
this
und einer Reihe von Argumenten ausgeführt, die als Array angegeben sind. Der Trick besteht darin, dass apply das Array in eine Reihe von tatsächlichen Funktionsargumenten umwandelt. In diesem Fall ruft es also schließlichMath.max(0.0265, 0.0250, 0.024, 0.031)
mit derthis
ausgeführten Funktion aufMath
. Ich kann nicht verstehen, warum esMath
ehrlich gesagt sein sollte, ich glaube nicht, dass die Funktion eine gültige erfordertthis
. Oh und hier ist eine richtige Erklärung: stackoverflow.com/questions/21255138/…Suchen Sie das Objekt, dessen Eigenschaft "Y" den größten Wert in einem Array von Objekten hat
Eine Möglichkeit wäre die Verwendung von Array Reduce.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce http://caniuse.com/#search=reduce (IE9 und höher)
Wenn Sie den IE (nur Edge) nicht unterstützen müssen oder einen Pre-Compiler wie Babel verwenden können, können Sie die knappere Syntax verwenden.
quelle
const max = data.reduce((prev, current) => (prev.y > current.y) ? prev : current, 1)
null
über 1 wählen .sauber und einfach ES6 (Babel)
Der zweite Parameter sollte einen Standardwert sicherstellen, wenn er
arrayToSearchIn
leer ist.quelle
-Infinity
(ein wahrer Wert) für ein leeres Array-Infinity
Math.max(...state.allProjects.map(o => o.id), 1);
0
zuarrayToSearchIn[0].y
. Zeitkomplexitätsvergleich: stackoverflow.com/a/53654364/860099Vergleich der Baum- ONELINER, die den Fall der Minuszahlen behandeln (Eingabe im
a
Array):bearbeitbares Beispiel hier . Ideen von: maxA , maxB und maxC (Nebeneffekt von maxB ist, dass das Array
a
geändert wird, weil es vorhandensort
ist).Code-Snippet anzeigen
Bei größeren Arrays
Math.max...
wird die Ausnahme ausgelöst : Die maximale Größe des Aufrufstapels wurde überschritten (Chrome 76.0.3809, Safari 12.1.2, Datum 2019-09-13).Code-Snippet anzeigen
quelle
y
Maximalwert zu erhalten, indem das.y
am Ende weggelassen wird.Nun, zuerst sollten Sie die JSON-Zeichenfolge analysieren, damit Sie leicht auf ihre Mitglieder zugreifen können:
Verwenden Sie die
map
Methode, um die Werte zu extrahieren:Dann können Sie das Array in der
max
Methode verwenden:Oder als Einzeiler:
quelle
jQuery
json
- er verwendet keine externe Javascript-Bibliothek in seiner Antwort :)Ich möchte die knapp akzeptierte Antwort Schritt für Schritt erklären :
Weitere Informationen:
Math.max.apply()
Array.prototype.map()
Array.from()
Function.prototype.apply()
Array.prototype.filter()
Array.prototype.find()
quelle
quelle
Wenn Sie (oder jemand hier) die
lodash
Dienstprogrammbibliothek verwenden können, verfügt sie über eine maxBy- Funktion, die in Ihrem Fall sehr praktisch wäre.daher können Sie als solche verwenden:
quelle
Oder eine einfache Sorte! Halte es real :)
quelle
a.y<a.y
zub.y-a.y
. Zeitkomplexitätsvergleich hier: stackoverflow.com/a/53654364/860099Jedes Array und erhalten maximalen Wert mit Math.
quelle
quelle
ES6-Lösung
Math.max(...array.map(function(o){return o.y;}))
Weitere Informationen finden Sie unter https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max
quelle
quelle
Hier ist die kürzeste Lösung (One Liner) ES6 :
quelle