Szukam naprawdę szybkiego, czystego i wydajnego sposobu uzyskania maksymalnej wartości „y” w następującym wycinku JSON:
[
{
"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
}
]
Czy pętla for to jedyny sposób na obejście tego? Lubię jakoś używać Math.max
.
javascript
json
Rio
źródło
źródło
Odpowiedzi:
Aby znaleźć maksymalną
y
wartość obiektów warray
:źródło
this
i szeregu argumentów określonych jako tablica. Sztuka polega na tym, że zastosowanie zmienia tablicę w szereg rzeczywistych argumentów funkcji. Więc w tym przypadku w końcu wywołuje sięMath.max(0.0265, 0.0250, 0.024, 0.031)
zthis
wykonaną funkcjąMath
. Nie rozumiem, dlaczego tak powinno byćMath
, nie sądzę, że funkcja wymaga poprawnegothis
. Aha, a oto prawidłowe wyjaśnienie: stackoverflow.com/questions/21255138/…Znajdź obiekt, którego właściwość „Y” ma największą wartość w tablicy obiektów
Jednym ze sposobów byłoby użycie funkcji Array redukcja ...
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce http://caniuse.com/#search=reduce (IE9 i wyżej)
Jeśli nie potrzebujesz obsługi IE (tylko Edge) lub możesz użyć kompilatora wstępnego, takiego jak Babel, możesz użyć bardziej zwięzłej składni.
źródło
const max = data.reduce((prev, current) => (prev.y > current.y) ? prev : current, 1)
null
ponad 1.czysty i prosty ES6 (Babel)
Drugi parametr powinien zapewnić wartość domyślną, jeśli
arrayToSearchIn
jest pusty.źródło
-Infinity
( wartość zgodną z prawdą ) dla pustej tablicy-Infinity
pustą tablicę, możesz przekazać wartość początkowąMath.max(...state.allProjects.map(o => o.id), 1);
0
naarrayToSearchIn[0].y
. Porównanie złożoności czasowej: stackoverflow.com/a/53654364/860099Porównanie drzewa ONELINERY, które obsługują wielkość liczb ujemnych (dane wejściowe w
a
tablicy):przykład do edycji tutaj . Pomysły od: maxA , maxB i maxC (efektem ubocznym maxB jest to, że tablica
a
jest zmieniana, ponieważsort
jest na miejscu).Pokaż fragment kodu
W przypadku większych tablic
Math.max...
wyjątek: Przekroczono maksymalny rozmiar stosu wywołań (Chrome 76.0.3809, Safari 12.1.2, data 13.09.2019)Pokaż fragment kodu
źródło
y
wartością, pomijając.y
koniec.Najpierw powinieneś przeanalizować ciąg JSON, abyś miał łatwy dostęp do jego członków:
Użyj
map
metody, aby wyodrębnić wartości:Następnie możesz użyć tablicy w
max
metodzie:Lub jako jedna linijka:
źródło
jQuery
json
- w swojej odpowiedzi nie korzysta z zewnętrznej biblioteki javascript :)Chciałbym wyjaśnić zwięźle przyjętą odpowiedź krok po kroku:
Dalsza informacja:
Math.max.apply()
Array.prototype.map()
Array.from()
Function.prototype.apply()
Array.prototype.filter()
Array.prototype.find()
źródło
źródło
jeśli ty (lub ktoś tutaj) możesz swobodnie korzystać z
lodash
biblioteki narzędziowej, ma ona funkcję maxBy, która byłaby bardzo przydatna w twoim przypadku.dlatego możesz użyć jako takiego:
źródło
Lub prosty rodzaj! Utrzymanie prawdziwego :)
źródło
a.y<a.y
nab.y-a.y
. Porównanie złożoności czasowej tutaj: stackoverflow.com/a/53654364/860099Każda tablica i uzyskaj maksymalną wartość z Math.
źródło
Oto najkrótsze rozwiązanie (One Liner) ES6 :
źródło
źródło
Rozwiązanie ES6
Math.max(...array.map(function(o){return o.y;}))
Aby uzyskać więcej informacji, zobacz https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max
źródło
źródło