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
yvalor máximo de los objetos enarray:fuente
thisy 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)conthisla función ejecutadaMath. No puedo ver por qué debería serMathfrancamente, 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)nullmás de 1.limpio y simple ES6 (Babel)
El segundo parámetro debe garantizar un valor predeterminado si
arrayToSearchInestá vacío.fuente
-Infinity(un valor verdadero ) para una matriz vacía-Infinitypara una matriz vacía, puede pasar un valor inicialMath.max(...state.allProjects.map(o => o.id), 1);0aarrayToSearchIn[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
amatriz):ejemplo editable aquí . Ideas de: maxA , maxB y maxC (el efecto secundario de maxB es que la matriz
ase cambia porquesortestá 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
yvalor máximo al dejarlo.yal 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
mapmétodo para extraer los valores:Luego puede usar la matriz en el
maxmétodo:O como una frase:
fuente
jQueryjson: no está usando una biblioteca javascript externa en su respuesta :)fuente
si usted (o alguien aquí) es libre de usar
lodashla 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.yab.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