循环对象并返回javascript中的最小数字

时间:2013-12-23 01:50:28

标签: javascript object for-in-loop

所以我是一个JS新手,我正试图弄清楚如何解决我的问题。我试图循环一个对象并返回最小的数字。

在我的var shortest = ;中,如果我对一个数字进行硬编码说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;
};

4 个答案:

答案 0 :(得分:2)

将最短的初始值设置为Number.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)

试试这个:

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

答案 2 :(得分:1)

失败的原因在于:

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

由于 shortest 的值未定义<运算符会将其转换为NaN进行测试,并根据The Abstract Relational Comparison Algorithm的规则,将任何内容同步到NaN会返回undefined,这相当于false

修复方法是将最短初始化为某个值,例如正如qiu-deqing建议使用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 测试,以避免继承属性。

答案 3 :(得分: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