返回给定字符串的最高和最低编号 - Javascript

时间:2018-03-26 18:31:12

标签: javascript

在这个小小的作业中,你会得到一串空格分隔的数字,并且必须返回最高和最低的数字。

我知道我可以找到这个问题的几十个解决方案和例子,但我有一个案例,我真的无法理解,我想知道原因。

这是代码



highAndLow = numbers => {
  var smallestElement = numbers[0];
  var highestElement = numbers[0];
  numbers = numbers.split(' ');
  for (var i = 0; i < numbers.length; i++) {
    if (numbers[i] < smallestElement) {
      smallestElement = numbers[i];
    }
    console.log(`${numbers[i]} > ${highestElement}`);
    if (numbers[i] > highestElement) {
      console.log('----------------------------');
      highestElement = numbers[i];
    }
  }

  return `${highestElement} ${smallestElement}`;
};

console.log(highAndLow('4 5 29 54 4 0 -214 542 -64 1 -3 6 12')); 
&#13;
&#13;
&#13;

考虑到上面的示例,我的结果应为542 -214,但我得到6 -214

当条件为真时,我将两个console.log打印-----------------,但是当我查看输出时

enter image description here

if(6 > 542)如何返回true

2 个答案:

答案 0 :(得分:1)

您获得6作为最高值的原因是因为当您执行if (numbers[i] > highestElement)时,它正在比较字符串而不是数字,而字符串6中的字符串大于54因为它逐字符地比较。所以将if (numbers[i] > highestElement)更改为if (+numbers[i] > +highestElement)(+将字符串转换为数字)

highAndLow = numbers => {
  var smallestElement = numbers[0];
  var highestElement = numbers[0];
  numbers = numbers.split(' ');
  for (var i = 0; i < numbers.length; i++) {
    if (+numbers[i] < +smallestElement) {
      smallestElement = numbers[i];
    }
    console.log(`${numbers[i]} > ${highestElement}`);
    if (+numbers[i] > +highestElement) {
      console.log('----------------------------');
      highestElement = numbers[i];
    }
  }

  return `${highestElement} ${smallestElement}`;
};

console.log(highAndLow('4 5 29 54 4 0 -214 542 -64 1 -3 6 12')); 

答案 1 :(得分:0)

您正在比较string.Instead您可以将字符串拆分为数组并使用map函数将每个元素转换为整数。然后使用sort来排列数组,然后使用Math.max/min来获取值

highAndLow = function(x) {
  // split the string & map function to convert each element to number
  var newArray = x.split(' ').map(function(item) {
    return Number(item)
  })

  return {
    max: Math.max(...newArray),
    min: Math.min(...newArray),
  }
};

console.log(highAndLow('4 5 29 54 4 0 -214 542 -64 1 -3 6 12'));