1

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

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])和,它可以识别两个值(12 as和 6 as ),但它不会进入条件。alert(max)this[i]max

这里发生了什么?

4

2 回答 2

7

你有一个字符串数组,而不是数字。字符串“6”大于字符串“12”。

尝试在值周围不带引号的情况下初始化数组。

于 2012-04-23T13:53:32.657 回答
1

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

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

演示

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());
于 2012-04-23T13:56:22.490 回答