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);
}