Estou procurando uma maneira muito rápida, limpa e eficiente de obter o valor máximo de "y" na seguinte fatia 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
}
]
Um loop for é a única maneira de fazer isso? Estou interessado em usar de alguma forma Math.max
.
javascript
json
Rio
fonte
fonte
Respostas:
Para encontrar o
y
valor máximo dos objetos emarray
:fonte
this
e uma série de argumentos especificados como uma matriz. O truque é que aplicar transforma o array em uma série de argumentos de função reais. Portanto, neste caso, ele finalmente chamaMath.max(0.0265, 0.0250, 0.024, 0.031)
comthis
a função executadaMath
. Não vejo por queMath
, francamente, não acho que a função exija um válidothis
. Ah, e aqui está uma explicação adequada: stackoverflow.com/questions/21255138/...Encontre o objeto cuja propriedade "Y" tenha o maior valor em uma matriz de objetos
Uma maneira seria usar Array reduzir ..
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce http://caniuse.com/#search=reduce (IE9 e acima)
Se você não precisa oferecer suporte ao IE (apenas Edge), ou pode usar um pré-compilador como o Babel, pode usar a sintaxe mais concisa.
fonte
const max = data.reduce((prev, current) => (prev.y > current.y) ? prev : current, 1)
null
sobre 1.ES6 limpo e simples (Babel)
O segundo parâmetro deve garantir um valor padrão se
arrayToSearchIn
estiver vazio.fonte
-Infinity
(a truthy valor) para um array vazio-Infinity
para um array vazio, você pode passar um valor inicialMath.max(...state.allProjects.map(o => o.id), 1);
0
paraarrayToSearchIn[0].y
. Tempo complexidade comparação: stackoverflow.com/a/53654364/860099Comparação da árvore ONELINERS que lida com maiúsculas e minúsculas números (entrada na
a
matriz):exemplo editável aqui . Ideias de: maxA , maxB e maxC (o efeito colateral de maxB é que a matriz
a
é alterada porquesort
está no local).Mostrar snippet de código
Para matrizes maiores, a
Math.max...
exceção será lançada : tamanho máximo da pilha de chamadas excedido (Chrome 76.0.3809, Safari 12.1.2, data 2019-09-13)Mostrar snippet de código
fonte
y
valor máximo , deixando de fora.y
o final.Bem, primeiro você deve analisar a string JSON, para poder acessar facilmente seus membros:
Use o
map
método para extrair os valores:Então você pode usar a matriz no
max
método:Ou como uma linha:
fonte
jQuery
json
- ele não está usando uma biblioteca de javascript externo em sua resposta :)Gostaria de explicar a resposta concisa concisa passo a passo:
Outras informações:
Math.max.apply()
Array.prototype.map()
Array.from()
Function.prototype.apply()
Array.prototype.filter()
Array.prototype.find()
fonte
fonte
se você (ou alguém aqui) estiver livre para usar a
lodash
biblioteca de utilitários, ela possui uma função maxBy que seria muito útil no seu caso.portanto, você pode usar como tal:
fonte
Ou um tipo simples! Mantendo a realidade :)
fonte
a.y<a.y
parab.y-a.y
. Comparação da complexidade de tempo aqui: stackoverflow.com/a/53654364/860099Cada matriz e obtenha o valor máximo com Math.
fonte
Aqui está a solução mais curta (One Liner) ES6 :
fonte
fonte
Solução ES6
Math.max(...array.map(function(o){return o.y;}))
Para obter mais detalhes, consulte https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max
fonte
fonte