数组的最高值

时间:2016-07-08 08:28:05

标签: javascript arrays

我有一个数组,其中包含几个数字,如下所示:

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

我想从这个数组中获得最小和最大的数字。这似乎很容易,但是我意外地得到了以下代码的错误输出。

function highAndLow(numbers){
var args = Array.prototype.slice.call(arguments);
var m = 0, i = 0, n = args.length;

console.log(args.length)

    for (i=0; i < n; i++) {
        if (args[i] > m) {
            m = args[i];
            console.log(m)
        }
    }

return m

}

它表示长度为1,返回值为0。

7 个答案:

答案 0 :(得分:9)

您有一个字符串作为参数。你需要先拆分。并转换为数字。

args = numbers.split(' ').map(Number);

次要提示:您可以使用第一个元素作为第一个最小/最大值,并从第二个元素迭代。

&#13;
&#13;
function highAndLow(numbers) {
    var args = numbers.split(' ').map(Number),
        min = args[0],
        max = args[0],
        i,
        n = args.length;

    for (i = 1; i < n; i++) {
        if (args[i] < min) {
            min = args[i];
        }
        if (args[i] > max) {
            max = args[i];
        }
    }
    return { min: min, max: max };
}

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

答案 1 :(得分:5)

您可以使用Math.max(), Math.min()

function highAndLow(str){
  var arr = str.split(/\s/);
  var max = Math.max.apply(Math, arr);
  var min = Math.min.apply(Math, arr);
  console.log('Max:::', max, " Min::::", min);
}

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

答案 2 :(得分:2)

您正在将字符串作为参数传递给您的函数。

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

应替换为

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

实际传递带数字的数组。

答案 3 :(得分:1)

&#13;
&#13;
function highAndLow(data) {
  var data = "4 5 29 54 4 0 -214 542 -64 1 -3 6 -6";
  var dataArr = data.split(' ').map(Number);
  var result = {};
  result.max = Math.max.apply(Math, dataArr);
  result.min = Math.min.apply(Math, dataArr);
  return result;
}
var res = highAndLow("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6")
console.log(res.min);
console.log(res.max);
&#13;
&#13;
&#13;

答案 4 :(得分:1)

这是最简单的方法:

function highAndLow(str) {
  str = str.split(' ').sort(function(a, b) {
    return parseInt(a) - parseInt(b)
  });
  return [str[str.length - 1],
    str[0]
  ];
}
document.write(highAndLow('4 5 29 54 4 0 -214 542 -64 1 -3 6 -6'));

答案 5 :(得分:1)

您可以尝试使用此代码。

 <script type="text/javascript">

 function highAndLow(numbers) 
 {

                var args = numbers.split(" ");                    
                console.log(args.length)
                var min = Math.min.apply(Math, args),
                max = Math.max.apply(Math, args);
                console.log(min);
                console.log(max);


 }

 highAndLow('4 5 29 54 4 0 -214 542 -64 1 -3 6 -6');
 </script>

答案 6 :(得分:1)

splice.call返回一些不是数组长度的东西,因为它将所有内容都视为字符。

这个实现应该有所帮助,

  1. 使用array.split(delimter)Javascript Split
  2. 将字符串与空格分开
  3. 然后在进行测试时将拆分的数组转换为数字
  4. 我们循环并测试最小和最大数组值
  5. // Code goes here
    
     
    function highAndLow(numbers){
      var args = numbers.split(" ");
      
      var n= args.length;
      
      document.getElementById("argLength").innerHTML="Array Length:"+n;
      
      var i=0;
      var max = Number(args[i]);
      var min = Number(args[i]);
      
      for(i=1;i<n; i++){
        var num=Number(args[i]);
        
        if(num>max)
            max=num;
      
        if(min>num)   
          min=num;
        
      }
      
      document.getElementById("output").innerHTML=("Min:"+min+", Max:"+max);
      
    }
    <!DOCTYPE html>
    <html>
    
      <head>
     
      </head>
    
      <body onload='highAndLow("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6");'>
        
        <h1 id="argLength"></h1>
        
        <h1 id="output"> </h1>
      </body>
    
    </html>