2
function function1() {
  arr = document.getElementById("textfield").value;
  arr = arr.split(",");
  length = arr.length;
  largestNum = -9999;
  for (i = 0; i < length; i++) {
    if (arr[i] > largestNum) {
      largestNum = arr[i];
    }
  }
  alert("Largest number: " + largestNum);
}

ここで一体何が起こっているのか誰か教えてくれませんか? なぜ 12 ではなく 8 が表示されるのかわかりません

http://jsfiddle.net/qkLpA/15/

編集 - ここで修正: http://jsfiddle.net/qkLpA/12/

4

3 に答える 3

6

文字列を分割しているため、結果の配列の各要素は文字列になります。文字列を比較すると、文字ごとに進み、8 は 1 よりも大きいため、2 には進みません。

解決策は、分割後に項目を数値に変換することです。

arr = arr.split(",").map(function(s) { return parseInt(s, 10); });

混乱している場合は、mapあまり凝っていなくて、forループを使用してそれらを変換することもできます。

arr = arr.split(",");
for(var i = 0; i < arr.length; i++) {
    arr[i] = parseInt(arr[i], 10);
}

ではなく-Infinityイニシャルとして使用することを検討することもできます。largestNum-9999

于 2013-09-15T22:32:37.657 に答える
3

最大のハンバーを取得するためのはるかに短い方法があります。

function function1() {
  var arr = document.getElementById("textfield").value;
  arr = arr.split(",");
  var max = Math.max.apply(null, arr);
  alert("Largest number: " + max);
}

フィドル

于 2013-09-15T22:34:53.693 に答える
0

あなたの問題は.split()、テキストフィールド文字列の が、数値ではなく文字列の配列を作成することです。結果として、if (arr[i] > largestNum)for ループでの比較は、実際には、整数の数値比較ではなく、文字列の辞書式比較になります。「8」が「12」よりも大きいのはそのためです。

これは、比較する前に文字列を整数に変換する更新された jsfiddleで確認できます。

于 2013-09-15T22:47:49.073 に答える