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/12/
答案 0 :(得分: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
。
答案 1 :(得分:3)
获得最大的亨利的方法要短得多:
function function1() {
var arr = document.getElementById("textfield").value;
arr = arr.split(",");
var max = Math.max.apply(null, arr);
alert("Largest number: " + max);
}
答案 2 :(得分:0)
你的问题是textfield字符串的.split()
创建了一个字符串数组,而不是数字。因此,你在for循环中的比较if (arr[i] > largestNum)
实际上是字符串的字典比较,而不是你可能想到的整数的数字比较。这就是“8”大于“12”的原因。
您可以在the updated jsfiddle中确认这一点,在比较之前将字符串转换为整数。