在JavaScript中获取数组中的最大值和最小值
我从数据属性创build以下数组,我需要能够从中获取最高和最低的值,以便稍后将其传递给另一个函数。
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
我的列表项目看起来像这样(为了可读性,我已经减less了):
<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>
一个快速的console.log价格显示我的数组似乎是sorting,所以我可以抓住第一个和最后一个元素,我认为,但目前的名称和数组中的值是相同的,所以每当我尝试做一个价格[0 ],我弄不明白
[] 19.38 19.38 20.00 20.00 29.97 29.97 31.00 31.00
有一种感觉,这是一个愚蠢的简单的问题,所以请亲切:)
要获得数组中的最小/最大值,可以使用:
var _array = [1,3,2]; Math.max.apply(Math,_array); // 3 Math.min.apply(Math,_array); // 1
为什么不把它作为价格而不是对象来存储呢?
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
这样你可以
prices[0]; // cheapest prices[prices.length - 1]; // most expensive
请注意,您可以使用shift()
和pop()
来分别获取最小和最大价格,但它会从数组中取消价格。
更好的select是使用下面的Sergei解决scheme,分别使用Math.max
和min
。
编辑:
我意识到如果你有像[11.5, 3.1, 3.5, 3.7]
, 11.5
被视为一个string,并且会按字典顺序出现在 3.x
之前 ,那么你需要将自定义sorting函数传递给确保他们确实被视为浮动:
prices.sort(function(a, b) { return a - b });
取而代之的是,获得所有这些价格的另一个(也许更简洁)的方法可能是:
var prices = $(products).children("li").map(function() { return $(this).prop("data-price"); }).get();
此外,您可能需要考虑过滤数组以排除空值或非数值数组值,以防它们存在:
prices = prices.filter(function(n){ return(!isNaN(parseFloat(n))) });
然后使用上面的Sergey的解决scheme:
var max = Math.max.apply(Math,prices); var min = Math.min.apply(Math,prices);
如果您有“分散”(不在数组中)值,您可以使用:
var max_value = Math.max(val1, val2, val3, val4, val5);
arr = [9,4,2,93,6,2,4,61,1]; ArrMax = Math.max.apply(Math, arr);
使用它,它可以在静态数组和dynamic生成的数组上工作。
var array = [12,2,23,324,23,123,4,23,132,23]; var getMaxValue = Math.max.apply(Math, array );
当我试图从下面的代码中find最大值时,我遇到了这个问题
$('#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);
当我使用时,我正在获得'NAN'
var max_value = Math.max(12, 21, 23, 2323, 23);
用我的代码
- 导航栏位置为模态视图 – iOS7
- 在后台服务中使用Google Play服务LocationClient
- getLastKnownLocation返回null
- angularJS – 从鼠标点击div中获取x和y的位置
- 如何将MouseListener添加到Java Swing Canvas上的项目
- location.host与location.hostname和跨浏览器兼容性?
- window.location与只是位置
- 什么是从正常stream程中获取元素的CSS属性?
- window.location.href,window.location.replace和window.location.assign之间的区别