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

谁能告诉我这里到底发生了什么,我不知道为什么它给我 8 而不是 12

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

您可能还想考虑使用-Infinityas 首字母largestNum而不是-9999.

于 2013-09-15T22:32:37.657 回答
3

有一个更短的方法来获得最大的humber:

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中确认这一点,该 jsfiddle在比较之前将字符串转换为整数。

于 2013-09-15T22:47:49.073 回答