数组最大值函数给出意外结果

时间:2012-04-23 13:52:45

标签: javascript arrays for-loop max

我有这个函数用于返回数组的最大值:

Array.prototype.max = function() {

var max = this[0];
var len = this.length;

for (var i = 1; i < len; i++)
{

    if (this[i] > max)
    {       
        max = this[i];
    }
}

    return max;
}

当我使用这个数组时:

var data1Values = ['0','0','0','0','3','0','6','12']

data1Values.max()返回6而不是12.它以某种方式跳过最后一个值。

我在循环中插入了alert(this[i])alert(max),它识别了两个值(12为this[i],6为max)但它不会进入条件

这里发生了什么?

2 个答案:

答案 0 :(得分:7)

您有一系列字符串,而不是数字。字符串&#34; 6&#34;大于字符串&#34; 12&#34;。

尝试初始化数组时不使用值的引号。

答案 1 :(得分:1)

您正在比较字符串。 “2”大于“1000”

更改为数字或添加parseInt(this [i],10)

DEMO

Array.prototype.max = function() {

  var len = this.length;
  var max = -1;
  for (var i=0; i < len; i++) {
    var val = parseInt(this[i],10);
    if (val > max) {       
        max = val;
    }
  }

  return max;
}

var data1Values = ['0','0','0','0','3','0','6','12']

alert(data1Values.max());