JavaScript:查找具有最高&;最低的
这看起来很直截了当,所以当它不起作用时我很惊讶。我试图找到最高和最低“价格”的对象。首先,请确认或更正我的逻辑。如果逻辑正确,请说明问题所在JavaScript:查找具有最高&;最低的,javascript,Javascript,这看起来很直截了当,所以当它不起作用时我很惊讶。我试图找到最高和最低“价格”的对象。首先,请确认或更正我的逻辑。如果逻辑正确,请说明问题所在 var high; var low; var j=0; for (i in obj) { //alert(obj[i].price); if(j===0){ high=obj[i].price; low=obj[i].price }else{ if(obj[i].price > high){hi
var high;
var low;
var j=0;
for (i in obj) {
//alert(obj[i].price);
if(j===0){
high=obj[i].price; low=obj[i].price
}else{
if(obj[i].price > high){high=obj[i].price}
if(obj[i].price < low ){low =obj[i].price}
}
alert("high: " + high +", low: " +low);
j++;
}
var高;
var低;
var j=0;
用于(obj中的i){
//预警(obj[i].价格);
如果(j==0){
高=对象[i]。价格;低=对象[i]。价格
}否则{
if(obj[i].price>high){high=obj[i].price}
if(obj[i].price
注意:这很好:
对于(obj中的i){
脚本的另一部分可以完美地循环列表,并且使用这种方法。您可以通过以下方式简单地按价格对对象数组进行排序:
objects.sort(function(a, b) {
return a.price < b.price ? -1 : 1
});
objects.sort(函数(a,b){
返回a.价格
上面的代码将按brice升序对对象进行排序(将“”替换为降序)…然后您可以使用:对象[0]访问最低的对象,使用:对象[objects.length-1]编辑:正在工作。我刚想指出数学.min()和max,但有人抢先告诉了我;)
Math.max
和Math.min
是内置方法,可用于从传递的参数中查找最高或最低数字。这些函数可以使用的一种技术是将它们应用于数字数组
您所拥有的应该可以很好地执行,但如果您正在寻找更简洁的内容,下面是一个技术示例:
var arr = [],
high, low;
for (var i in obj)
arr.push(obj[i].price);
high = Math.max.apply(Math, arr);
low = Math.min.apply(Math, arr);
例如:
您可能还需要添加一个hasOwnProperty()
检查,以防止对可枚举的继承属性进行迭代。这可能是当前问题的原因,或者是i
变量缺少var
关键字
for (var i in obj) {
if (obj.hasOwnProperty(i) && obj[i].price)
arr.push(obj[i].price);
}
可能不是这样,但是
obj
是一个数组吗?如果是这样,您可以使用一些辅助函数使其更加简洁。Show使用您的变量obj
。这假设objects
是一个数组,目前还不清楚。这可能是低效的,因为所有元素都已排序,但您只查找lowest/highest.Yes,我(错误地)假设他在一个数组上迭代:PNot不起作用,至少默认情况下不起作用,因为没有对象.prototype.sort
。编辑过的帖子。就像Andy E提到的,math.min和max是正确的选择!hasOwnProperty
是为ES3失败者准备的。ES5胜利者使用对象.键(obj).map(函数(o){return o.price;})
@Raynos:你是什么意思?Object.keys
返回一个字符串数组,即键。这些键没有price
属性。@pimvdb>{.map(函数(k){return obj[k].price;})
my bad。
for (var i in obj) {
if (obj.hasOwnProperty(i) && obj[i].price)
arr.push(obj[i].price);
}