2013-12-23 21 views
1

所以我是一个JS新手,并试图找出如何解决我的问题。我试图循环一个对象并返回最低的数字。在一个对象上循环,并在javascript中返回最低数字

在我的如果我硬编码一个数字,说var shortest = 455;然后问题返回正确的数字3.虽然我不知道该怎么把它放在那里使其默认为空白。我曾尝试object[0]object[key]'',没有这些工作的正常

var myObj = {first: 45, second: 23, third: 3, fourth: 222, fifth: 2343}; 

var myFunc = function (object) { 
    var shortest = ; 
    for (var key in object) { 
     if (object[key] < shortest) { 
     shortest = object[key]; 
     } 
    }; 
    return shortest; 
}; 
+1

如何把一个真正的大数字? “Infinity”怎么样?这个问题看起来很像你以前的问题。这些作业问题吗? –

+0

他们是,只是问题即时创建试图学习这个可爱的语言:)我可以硬编码的数字,但这并不适用于现实世界,所以试图了解什么是正确的方式来做到这一点。 – jstone

+0

它为什么不在现实世界中工作? –

回答

2

设置最短的初始值数.MAX_VALUE是您所需要的全部

var myObj = {first: 45, second: 23, third: 3, fourth: 222, fifth: 2343}; 

var myFunc = function (object) { 
    var shortest = Number.MAX_VALUE; 
    for (var key in object) { 
     if (object[key] < shortest) { 
     shortest = object[key]; 
     } 
    }; 
    return shortest; 
}; 

Number.MAX_VALUE 最大的可表示正数。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number

+1

+1实际回答问题。更有帮助的是指出,当* x *未定义时,'x RobG

+0

感谢您的反馈。忘记处理undefined是bug的常见来源:) –

+0

谢谢这个帮助了很多。我读了MDN文档,'MIN_value'是什么意思,因为它说'Number.MIN_VALUEThe最小的正数可表示的数字 - 也就是说,最接近于零的正数(实际上不是零)“,我真的不明白这一点。我将它与我的代码一起运行,并在控制台中返回了“5e-324”。 – jstone

1

试试这个:

var myObj = {first: 45, second: 23, third: 3, fourth: 222, fifth: 2343}; 

    var myFunc = function (object) { 
     var shortest = object.first; 
     for (var key in object) { 
      if (object[key] < shortest) { 
      shortest = object[key]; 
      } 
     }; 
     return shortest; 
    }; 
+0

考虑到用例,假设有一个叫做'first'的键是不安全的。 – loganfsmyth

+0

你真的不想硬编码一个属性。要采取这种方法,您需要在循环的第一次迭代中初始化变量,无论是使用标志还是通过检查'undefined'的'shortest'。 –

+0

您不应该依赖于将* shortest *设置为某个随机值。如果'object.first === NaN'或'undefined'会怎么样?另外,请解释答案,而不是简单地发布代码。 – RobG

0

看看这有助于:

var lowest = function(ns) { 
    return Math.min.apply(0, ns); 
}; 

var values = function(obj) { 
    var result = []; 
    for (var i in obj) { 
    result.push(obj[i]); 
    } 
    return result; 
}; 

var result = lowest(values(myObj)); 

console.log(result); //=> 3 
1

失败的原因是在这里:

var myFunc = function (object) { 
    var shortest = ; 
    for (var key in object) { 
     if (object[key] < shortest) { 

由于最短值为未定义,所述<操作导致它被转换为NaN用于测试,并根据The Abstract Relational Comparison Algorithm的规则,任何与NaN无关的内容都会返回undefined,相当于false这里。

该修复方法是将最初的初始化为某个值,例如,作为秋德清建议Number.MAX_VALUE,或者您也可以使用类似:

function getShortest(object) { 
    var shortest, value; 

    for (var key in object) { 
     value = object[key]; 

     if (typeof value == 'number' && !isNaN(value)) { 

     if (typeof shortest != 'number') { 
      shortest = value; 
     } else { 
      if (value < shortest) { 
      shortest = value; 
      } 
     } 
     } 
    } 
    return shortest; 
} 

以上将确保你想比较数字和最短只会是一个数字或未定义。也应该有一个hasOwnProperty测试,以避免遗留属性。

相关问题