【问题标题】:Find largest value in a String of numbers without Math.max()在没有 Math.max() 的情况下查找一串数字中的最大值
【发布时间】:2017-05-02 15:43:00
【问题描述】:

这个函数出了什么问题,我想不通:

function highAndLow(numbers){
   var arr = numbers.split(" ");
   var largest = arr[0];
   for(var i = 1; i < arr.length; i++) {
      if(arr[i] > largest) {
         largest = arr[i];
      }
   }

   return largest;
 }

这个:

highAndLow("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6");

返回 6,它应该返回 542。感谢您的帮助!

【问题讨论】:

  • 您需要将字符串转换为数字,这样它们就不会按字母*顺序进行比较。 "20" &lt; "3" 因为 2 在 3 之前,但是 20 &gt; 3.
  • 但这就是我将字符串拆分为数组的原因。
  • 你还需要把if语句改成if(+arr[i] &gt; largest)

标签: javascript arrays string algorithm


【解决方案1】:

.map(Number) 链接到.split() 调用以将字符串字符转换为数字,以便在for 循环中进行正确比较。

function highAndLow(numbers) {
  var arr = numbers.split(" ").map(Number);
  var largest = arr[0];
  for (var i = 1; i < arr.length; i++) {
    if (arr[i] > largest) {
      largest = arr[i];
    }
  }
  return largest;
}

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

【讨论】:

    【解决方案2】:

    如果您正在寻找性能较低的最少代码选项,您可以使用 map 和 sort。

    return numbers.split(" ")
                  .map(Number)
                  .sort(function(a, b){return a-b})
                  .pop();
    

    地图会将所有字符串更改为一个数字:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map

    数组函数sort会升序排序:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort?v=example

    那么pop会从数组中取出第一个值:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop?v=example

    【讨论】:

      【解决方案3】:

      parseInt 在比较值时。

      代码

      function highAndLow(numbers){
         var arr = numbers.split(" ");
         var largest = arr[0];
         for(var i = 1; i < arr.length; i++) { 
            if(parseInt(arr[i]) > parseInt(largest)) {
               largest = arr[i];
            }
         }
      
         return largest;
       }
      

      【讨论】:

        【解决方案4】:

        一种解决方案是改变这一点:

        largest = arr[i];
        

        到这里:

        largest = +arr[i];
        

          function highAndLow(numbers){
               var arr = numbers.split(" ");
               var largest = arr[0];
               for(var i = 1; i < arr.length; i++) {
                  if(arr[i] > largest) {
                     largest = +arr[i];
                  }
               }
        
               return largest;
             }
             console.log(highAndLow("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"));

        【讨论】:

          猜你喜欢
          • 2015-01-25
          • 1970-01-01
          • 2013-03-27
          • 2014-11-13
          • 2018-09-23
          • 1970-01-01
          • 2016-02-21
          • 1970-01-01
          • 2010-11-25
          相关资源
          最近更新 更多