findindex - Obtener valor máximo y mínimo de la matriz en JavaScript
javascript indexof array of objects (6)
¿Por qué no almacenarlo como una matriz de precios en lugar de un objeto?
prices = []
$(allProducts).each(function () {
var price = parseFloat($(this).data(''price''));
prices.push(price);
});
prices.sort(function(a, b) { return a - b }); //this is the magic line which sort the array
De esa manera puedes simplemente
prices[0]; // cheapest
prices[prices.length - 1]; // most expensive
Tenga en cuenta que puede hacer shift()
y pop()
para obtener el precio mínimo y máximo respectivamente, pero esto eliminará el precio de la matriz.
Una alternativa aún mejor es usar la solución Sergei a continuación, usando Math.max
y min
respectivamente.
EDITAR:
Me di cuenta de que esto sería incorrecto si tiene algo como [11.5, 3.1, 3.5, 3.7]
ya que 11.5
se trata como una cadena, y vendría antes de la 3.x
en el orden del diccionario, debe pasar la función de clasificación personalizada a asegúrese de que efectivamente son tratados como flotador:
prices.sort(function(a, b) { return a - b });
Estoy creando la siguiente matriz a partir de atributos de datos y necesito poder tomar el valor más alto y más bajo para poder pasarla a otra función más adelante.
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
Los elementos de mi lista tienen este aspecto (he reducido la legibilidad):
<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>
Un console.log rápido sobre precios me muestra mi matriz, que parece estar ordenada para poder tomar el primer y último elemento que asumo, pero en la actualidad los nombres y valores de la matriz son los mismos, así que siempre que intento hacer un precio [0 ], Me quedo indefinido
[]
19.38 19.38
20.00 20.00
29.97 29.97
31.00 31.00
Tengo la sensación de que esta es una pregunta estúpidamente fácil, así que por favor sea amable :)
En lugar de .each, otro enfoque (quizás más conciso) para obtener todos esos precios podría ser:
var prices = $(products).children("li").map(function() {
return $(this).prop("data-price");
}).get();
Además, es posible que desee considerar filtrar la matriz para eliminar los valores de la matriz vacía o no numérica en caso de que existan:
prices = prices.filter(function(n){ return(!isNaN(parseFloat(n))) });
luego usa la solución de Sergey arriba:
var max = Math.max.apply(Math,prices);
var min = Math.min.apply(Math,prices);
Para obtener el valor mínimo / máximo en la matriz, puede utilizar:
var _array = [1,3,2];
Math.max.apply(Math,_array); // 3
Math.min.apply(Math,_array); // 1
Si tiene valores "dispersos" (no dentro de una matriz) puede usar:
var max_value = Math.max(val1, val2, val3, val4, val5);
use esto y funciona tanto en las matrices estáticas como en las matrices generadas dinámicamente.
var array = [12,2,23,324,23,123,4,23,132,23];
var getMaxValue = Math.max.apply(Math, array );
Tuve el problema cuando uso tratando de encontrar el valor máximo del código a continuación
$(''#myTabs'').find(''li.active'').prevAll().andSelf().each(function () {
newGetWidthOfEachTab.push(parseInt($(this).outerWidth()));
});
for (var i = 0; i < newGetWidthOfEachTab.length; i++) {
newWidthOfEachTabTotal += newGetWidthOfEachTab[i];
newGetWidthOfEachTabArr.push(parseInt(newWidthOfEachTabTotal));
}
getMaxValue = Math.max.apply(Math, array);
Estaba usando ''NAN''
cuando uso
var max_value = Math.max(12, 21, 23, 2323, 23);
con mi código
arr = [9,4,2,93,6,2,4,61,1];
ArrMax = Math.max.apply(Math, arr);