Obtenir un max et min de la valeur de tableau en JavaScript
Je suis entrain de créer le tableau suivant à partir des données d'attributs et j'ai besoin d'être en mesure de saisir la plus haute et la plus basse valeur de celui-ci afin que je puisse passer à une autre fonction plus tard.
var allProducts = $(products).children("li");
prices = []
$(allProducts).each(function () {
var price = parseFloat($(this).data('price'));
prices[price] = price;
});
console.log(prices[0]) <!-- this returns undefined
Ma liste des éléments ressembler à ceci (j'ai coupé pour des raisons de lisibilité):
<li data-price="29.97"><a href="#">Product</a></li>
<li data-price="31.00"><a href="#">Product</a></li>
<li data-price="19.38"><a href="#">Product</a></li>
<li data-price="20.00"><a href="#">Product</a></li>
Rapide de la console.journal sur le prix de la montre-moi mon tableau qui semble être triées de manière que je pourrais prendre le premier et le dernier élément, je suppose, mais, actuellement, les noms et les valeurs dans le tableau sont les mêmes donc, chaque fois que j'essaye de faire un prix[0], j'obtiens undefined
[]
19.38 19.38
20.00 20.00
29.97 29.97
31.00 31.00
Ai le sentiment que c'est une bête question facile, de sorte s'il vous plaît être gentil 🙂
- Ne devrait-ce pas
prices[price]
être ceci:prices.push()
afin d'utiliser les touches [0],[1]...? - Combien de prix êtes-vous susceptible d'avoir?
Vous devez vous connecter pour publier un commentaire.
Pour obtenir min/max de la valeur dans le tableau, vous pouvez utiliser:
Math.max.apply(null,_array)
et il a bien fonctionné. Aucune raison de ne pas le faire de cette façon?null
sans aucun problème pour le cas actuel. Mozilla gars aussi l'utiliser comme premier param dans leurs exemples au MDN:Math.max.apply(null, numbers);
Math.max(...array);
Pourquoi ne pas les stocker dans un tableau de prix à la place de l'objet?
De cette façon, vous pouvez simplement
Notez que vous pouvez faire
shift()
etpop()
pour obtenir min et max prix, respectivement, mais il prendra son envol le prix de la pile.Même la meilleure alternative est d'utiliser Sergei solution ci-dessous, en utilisant
Math.max
etmin
respectivement.EDIT:
J'ai réalisé que ce serait une erreur si vous avez quelque chose comme
[11.5, 3.1, 3.5, 3.7]
comme11.5
est traité comme une chaîne, et serait venu avant la3.x
dans l'ordre du dictionnaire, vous avez besoin pour passer en fonction de tri personnalisé pour s'assurer qu'ils sont en effet traitée comme float:sort()
dans votre réponse. afin de commentaire à proximité de codeparseFloat
avant de l'ajouter au tableau de tri utilisera automatiquement le numérique tri plutôt que chaîne de caractères.Math.max.apply(Math, arr)
etMath.min.apply(Math, arr)
respectivement que de trier tout le tableau? Tout plus que cela etmax
oumin
gagner par un long chemin. Et personnellement, je pense que c'est plus clair sur ce qui se passe.n*n - n
plus cher qu'une recherche régulière d'une valeur min ou max.Au lieu de .chacun, un autre (peut-être plus concis) approche pour l'obtention de tous ces prix peuvent être:
en outre, vous pouvez envisager de filtrage de la matrice pour se débarrasser de vide ou non-numériques tableau de valeurs dans le cas où ils doivent exister:
ensuite utiliser Sergey de la solution ci-dessus:
si vous avez des "dispersés" (pas à l'intérieur d'un tableau) les valeurs que vous pouvez utiliser:
Trouver plus grand et le plus petit nombre dans un tableau avec lodash.
JS:
HTML:
l'utiliser et il fonctionne sur les deux tableaux statiques et généré dynamiquement des tableaux.
J'ai eu le problème quand j'utilise en essayant de trouver la valeur max de code ci-dessous
Je recevais
'NAN'
lorsque j'utiliseavec mon code