Estoy buscando una forma realmente rápida, limpia y eficiente de obtener el valor máximo "y" en el siguiente segmento 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
}
]
¿Es un bucle for la única forma de hacerlo? Estoy interesado en usar de alguna manera Math.max
.
javascript
json
Rio
fuente
fuente
Respuestas:
Para encontrar el
y
valor máximo de los objetos enarray
:fuente
this
y una serie de argumentos especificados como una matriz. El truco es que aplicar convierte la matriz en una serie de argumentos de funciones reales. Entonces, en este caso, finalmente llamaMath.max(0.0265, 0.0250, 0.024, 0.031)
conthis
la función ejecutadaMath
. No puedo ver por qué debería serMath
francamente, no creo que la función requiera una válidathis
. Ah, y aquí hay una explicación adecuada: stackoverflow.com/questions/21255138/…Encuentre el objeto cuya propiedad "Y" tiene el mayor valor en una matriz de objetos
Una forma sería usar Array reduce ..
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce http://caniuse.com/#search=reduce (IE9 y superior)
Si no necesita admitir IE (solo Edge), o puede usar un precompilador como Babel, puede usar la sintaxis más concisa.
fuente
const max = data.reduce((prev, current) => (prev.y > current.y) ? prev : current, 1)
null
más de 1.limpio y simple ES6 (Babel)
El segundo parámetro debe garantizar un valor predeterminado si
arrayToSearchIn
está vacío.fuente
-Infinity
(un valor verdadero ) para una matriz vacía-Infinity
para una matriz vacía, puede pasar un valor inicialMath.max(...state.allProjects.map(o => o.id), 1);
0
aarrayToSearchIn[0].y
. Comparación de la complejidad del tiempo: stackoverflow.com/a/53654364/860099Comparación de Tree ONELINERS que manejan mayúsculas y minúsculas (entrada en
a
matriz):ejemplo editable aquí . Ideas de: maxA , maxB y maxC (el efecto secundario de maxB es que la matriz
a
se cambia porquesort
está en su lugar).Mostrar fragmento de código
Para matrices más grandes,
Math.max...
se lanzará una excepción: se excedió el tamaño máximo de la pila de llamadas (Chrome 76.0.3809, Safari 12.1.2, fecha 2019-09-13)Mostrar fragmento de código
fuente
y
valor máximo al dejarlo.y
al final.Me gustaría explicar la breve respuesta aceptada paso a paso:
Más información:
Math.max.apply()
Array.prototype.map()
Array.from()
Function.prototype.apply()
Array.prototype.filter()
Array.prototype.find()
fuente
Bueno, primero debe analizar la cadena JSON, para que pueda acceder fácilmente a sus miembros:
Use el
map
método para extraer los valores:Luego puede usar la matriz en el
max
método:O como una frase:
fuente
jQuery
json
: no está usando una biblioteca javascript externa en su respuesta :)fuente
si usted (o alguien aquí) es libre de usar
lodash
la biblioteca de utilidades, tiene una función maxBy que sería muy útil en su caso.por lo tanto, puede usar como tal:
fuente
O un tipo simple! Siendo realistas :)
fuente
a.y<a.y
ab.y-a.y
. Comparación de la complejidad del tiempo aquí: stackoverflow.com/a/53654364/860099Cada matriz y obtener el valor máximo con Math.
fuente
Aquí está la solución más corta (One Liner) ES6 :
fuente
fuente
Solución ES6
Math.max(...array.map(function(o){return o.y;}))
Para obtener más detalles, consulte https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max
fuente
fuente