RJB*_*RJB 49 javascript arrays jquery position
我从数据属性创建以下数组,我需要能够从中获取最高和最低值,以便稍后将其传递给另一个函数.
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
Run Code Online (Sandbox Code Playgroud)
我的列表项看起来像这样(我已经减少了可读性):
<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>
Run Code Online (Sandbox Code Playgroud)
一个快速的console.log价格显示我的数组看起来是排序的所以我可以抓住我假设的第一个和最后一个元素,但目前数组中的名称和值是相同的,所以每当我尝试做价格[0 ],我得到了不确定
[]
19.38 19.38
20.00 20.00
29.97 29.97
31.00 31.00
Run Code Online (Sandbox Code Playgroud)
有一种感觉这是一个非常简单的问题,所以请善待:)
Ser*_*ets 159
要获取数组中的最小/最大值,您可以使用:
var _array = [1,3,2];
Math.max.apply(Math,_array); // 3
Math.min.apply(Math,_array); // 1
Run Code Online (Sandbox Code Playgroud)
And*_*ong 12
为什么不将它存储为价格而不是对象?
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
Run Code Online (Sandbox Code Playgroud)
那样你就可以
prices[0]; // cheapest
prices[prices.length - 1]; // most expensive
Run Code Online (Sandbox Code Playgroud)
需要注意的是,你可以做shift(),并pop()分别获得最小和最大的价格,但它会起飞从阵列的价格.
更好的选择是使用下面的谢尔盖解决方案,分别使用Math.max和min.
编辑:
我意识到,这将是错误的,如果你有类似[11.5, 3.1, 3.5, 3.7]的11.5被视为一个字符串,并且会来之前的3.x在字典顺序,你需要自定义排序函数来传递,以确保它们是作为浮动确实处理:
prices.sort(function(a, b) { return a - b });
Run Code Online (Sandbox Code Playgroud)
bil*_*oah 11
获得所有这些价格的另一种(可能更简洁的)方法可能是:而不是.each.
var prices = $(products).children("li").map(function() {
return $(this).prop("data-price");
}).get();
Run Code Online (Sandbox Code Playgroud)
另外,您可能需要考虑过滤数组以除去空数字或非数字数组值,以防它们存在:
prices = prices.filter(function(n){ return(!isNaN(parseFloat(n))) });
Run Code Online (Sandbox Code Playgroud)
然后使用谢尔盖的解决方案:
var max = Math.max.apply(Math,prices);
var min = Math.min.apply(Math,prices);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
115522 次 |
| 最近记录: |