非常简单的问题:我试图比较数组中的值,而我完全难以理解为什么我的比较逻辑失败了。不知何故,在我的循环过程中,6被评估为>关于我做错了什么的任何想法?我完全难过了。这是代码,谢谢!
function highAndLow(numbers){
var compArr = numbers.split(" ");
var highNum = compArr[0]
var lowNum = compArr[0];
for (i = 1; i < compArr.length; i++) {
if (compArr[i] > highNum) {
highNum = compArr[i]
console.log(highNum)
}
}
for (i = 1; i < compArr.length; i++) {
if (compArr[i] < lowNum) {
lowNum = compArr[i]
}
}
return highNum + " " + lowNum
}
highAndLow("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6")
同样,我不知道怎么做,但我在控制台中得到的结果是6为highNum(不正确)和-214为lowNum(这是正确的)。我错过了一些明显的东西吗?
答案 0 :(得分:1)
compArr
的元素是字符串,因此它们按字典顺序进行比较,而不是数字进行比较。你应该制作一组数字:
var compArr = numbers.split(" ").map(Number);
function highAndLow(numbers){
var compArr = numbers.split(" ").map(Number);
var highNum = compArr[0]
var lowNum = compArr[0];
for (i = 1; i < compArr.length; i++) {
if (compArr[i] > highNum) {
highNum = compArr[i]
console.log(highNum)
}
}
for (i = 1; i < compArr.length; i++) {
if (compArr[i] < lowNum) {
lowNum = compArr[i]
}
}
return highNum + " " + lowNum
}
console.log(highAndLow("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"));
&#13;
答案 1 :(得分:0)
编辑以包括Barmar的答案。谢谢Barmar!
我明白了。我的比较是运行到数组的边缘,并尝试比较未定义。此外,由于我设置的方式,此方法不适用于只有两个值的字符串。这是我的新代码:
function highAndLow(numbers){
var compArr = numbers.split(" ").map(Number);
var highNum = compArr[0]
var lowNum = compArr[0];
if (compArr.length === 2) {
if (compArr[1] > highNum) {
highNum = compArr[1]
}
if (compArr[1] < lowNum) {
lowNum = compArr[1]
}
} else {
for (i = 1; i < compArr.length - 2; i++) {
if (compArr[i] > highNum) {
highNum = compArr[i]
}
}
for (i = 1; i < compArr.length - 2; i++) {
if (compArr[i] < lowNum) {
lowNum = compArr[i]
}
}
}
return highNum + " " + lowNum
}
然而,可能有一种更好/更清洁的方法。