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()12ではなく6を返します。どういうわけか最後の値をスキップします。

ループを挿入alert(this[i])alert(max)てループ内に入れましたが、両方の値(12としてthis[i]と6として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 に答える