非常简单的数组,循环和逻辑比较问题

时间:2017-06-06 21:28:49

标签: javascript arrays

非常简单的问题:我试图比较数组中的值,而我完全难以理解为什么我的比较逻辑失败了。不知何故,在我的循环过程中,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(这是正确的)。我错过了一些明显的东西吗?

2 个答案:

答案 0 :(得分:1)

compArr的元素是字符串,因此它们按字典顺序进行比较,而不是数字进行比较。你应该制作一组数字:

var compArr = numbers.split(" ").map(Number);

&#13;
&#13;
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;
&#13;
&#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

}

然而,可能有一种更好/更清洁的方法。