Je cherche un moyen très rapide, propre et efficace pour obtenir la valeur maximale "y" dans la tranche JSON suivante:
[
{
"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
}
]
Une boucle for est-elle la seule façon de procéder? Je tiens à utiliser en quelque sorte Math.max
.
javascript
json
Rio
la source
la source
Réponses:
Pour trouver la
y
valeur maximale des objets dansarray
:la source
this
et une série d'arguments spécifiés sous forme de tableau. L'astuce est qu'appliquer transforme le tableau en une série d'arguments de fonction réels. Donc dans ce cas il appelle finalementMath.max(0.0265, 0.0250, 0.024, 0.031)
avecthis
la fonction exécutéeMath
. Je ne vois pas pourquoi cela devrait êtreMath
franchement, je ne pense pas que la fonction nécessite un validethis
. Oh et voici une explication appropriée: stackoverflow.com/questions/21255138/…Rechercher l'objet dont la propriété "Y" a la plus grande valeur dans un tableau d'objets
Une façon serait d'utiliser la réduction de tableau ..
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce http://caniuse.com/#search=reduce (IE9 et supérieur)
Si vous n'avez pas besoin de prendre en charge IE (uniquement Edge), ou si vous pouvez utiliser un précompilateur tel que Babel, vous pouvez utiliser la syntaxe la plus laconique.
la source
const max = data.reduce((prev, current) => (prev.y > current.y) ? prev : current, 1)
null
plus de 1.ES6 propre et simple (Babel)
Le deuxième paramètre doit garantir une valeur par défaut si
arrayToSearchIn
est vide.la source
-Infinity
(une valeur véridique ) pour un tableau vide-Infinity
pour un tableau vide, vous pouvez passer une valeur initialeMath.max(...state.allProjects.map(o => o.id), 1);
0
enarrayToSearchIn[0].y
. Comparaison de la complexité temporelle: stackoverflow.com/a/53654364/860099Comparaison des ONELINERS d' arbre qui gèrent le cas des nombres négatifs (entrée dans le
a
tableau):exemple modifiable ici . Idées de: maxA , maxB et maxC (l'effet secondaire de maxB est que le tableau
a
est modifié parce qu'ilsort
est en place).Afficher l'extrait de code
Pour les baies plus grandes, l'
Math.max...
exception lancera: la taille maximale de la pile d'appels est dépassée (Chrome 76.0.3809, Safari 12.1.2, date 2019-09-13)Afficher l'extrait de code
la source
y
valeur maximale en laissant le.y
à la fin.Je voudrais expliquer la réponse concise acceptée étape par étape:
Plus d'informations:
Math.max.apply()
Array.prototype.map()
Array.from()
Function.prototype.apply()
Array.prototype.filter()
Array.prototype.find()
la source
Eh bien, vous devez d'abord analyser la chaîne JSON, afin que vous puissiez facilement accéder à ses membres:
Utilisez la
map
méthode pour extraire les valeurs:Ensuite, vous pouvez utiliser le tableau dans la
max
méthode:Ou en monoplace:
la source
jQuery
json
- il n'utilise pas de bibliothèque javascript externe dans sa réponse :)la source
si vous (ou quelqu'un ici) êtes libre d'utiliser la
lodash
bibliothèque d'utilitaires, elle a une fonction maxBy qui serait très pratique dans votre cas.vous pouvez donc utiliser comme tel:
la source
Ou une sorte simple! Garder les choses réelles :)
la source
a.y<a.y
pourb.y-a.y
. Comparaison de la complexité du temps ici: stackoverflow.com/a/53654364/860099Chaque tableau et obtenez la valeur maximale avec Math.
la source
Voici la solution la plus courte (One Liner) ES6 :
la source
la source
Solution ES6
Math.max(...array.map(function(o){return o.y;}))
Pour plus de détails, voir https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max
la source
la source