使用JavaScript查找数组中的最大元素

时间:2013-10-11 16:18:18

标签: javascript arrays

我正在尝试编写一个javascript程序,它将显示用户输入的10个数字中最大的一个。这是我到目前为止所做的,但是没有用。

<html>
    <head></head>
    <body>
    <script type="text/javascript">
         var counter=1;
         var number= new Array;
         number.length=9;
         var largest=0;

        while (counter <= 10)  {
            number=window.prompt("Enter Numbers 1-10 Number:"+counter+".");
                number[counter]= parseInt(number);
            counter++;
        }
        largest=Math.max.apply(Array);  
        document.writeln("<h1>Largest number is " +largest+ "</h1>");
</script>
</body>
</html>

5 个答案:

答案 0 :(得分:2)

您只是错过了Function.prototype.apply的预期thisArg

MDN描述的Syntax

  

fun.apply(thisArg [,argsArray])

如这个简单的例子所示

Math.max.apply (null,[5,4,3,7,9,]) //9
                ^^^^

其中null在示例中用于简单,因为Math不期望特定的上下文

你要做的是将数组number传递给Math.max,然后就是thisArg (尽管你似乎把它弄错了{{1} }})这将导致{{1>}中的以任何方式被零参数调用,根据§15.8.2.11

产生
  

给定零个或多个参数,在每个参数上调用ToNumber并返回   最大的结果值。

     
      
  • 如果没有给出参数,则结果为-∞。
  •   

答案 1 :(得分:1)

  1. 您正在将数组与temp变量混合以保存输入。
  2. apply有两个参数,即上下文(在本例中不相关)和arguments数组。
  3. 应该是这样的:

    var arr = [];
    while (counter <= 10)
    {
    
        number=window.prompt("Enter Numbers 1-10 Number:"+counter+".");
        arr[counter]= parseInt(number);
    
        counter++;
    }
    
    largest=Math.max.apply(Array, arr);  
    

    (Fiddle)

答案 2 :(得分:1)

几个问题,

  • 数组已编入索引。您通过将计数器设置为0来跳过0索引,这将搞乱阵列计算。 (如果你使用Math.max.apply(数组,数字),它将在没有0索引的情况下工作。)
  • 你用每个提示覆盖了数字变量,要么使用window.prompt提供给parseInt,要么将其提供给临时变量。
  • 您对apply变量的语法不正确。

试试这个:

var counter=0;
 var number= new Array;
 number.length=9;
var newnumber;
 var largest=0;




while (counter <= 10)
{

    newnumber=window.prompt("Enter Numbers 1-10 Number:"+counter+".");
    number[counter]= parseInt(newnumber);

    counter++;
}
largest=Math.max.apply(Math, number);  
document.writeln("<h1>Largest number is " +largest+ "</h1>");

答案 3 :(得分:0)

<html>
<head>
</head>
<body>
<script type="text/javascript">
var counter=1;
var number= [];

var largest=0;

while (counter <= 10){

number.push(Number(window.prompt("Enter Numbers 1-10 Number:"+counter+"."),10));

counter++;
}

Array.prototype.max = function () {
    return Math.max.apply(Math, this);
};


largest = number.max();
document.writeln("<h1>Largest number is " +largest+ "</h1>");


</script>
</body>
</html>

答案 4 :(得分:0)

您的代码存在的主要问题是:

  1. 您错过了this函数调用
  2. 中的Math.max.apply参数
  3. 每次从用户读取新值时,您都在销毁number数组。您需要为用户输入单独的变量。
  4. 但是,您根本不需要为此任务构建数组。在循环内部,只需将largest与用户提供的数字进行比较,并在适当时更新largest

    </head>
    <body>
    <script type="text/javascript">
     var counter;
     var number;
     var largest=Number.NEGATIVE_INFINITY;
    
     for (counter = 1; counter <= 10; counter++)
     {
    
        number = window.prompt("Enter Numbers 1-10 Number:"+counter+".");
        number = parseInt(number);
        if (number > largest) {
            largest = number;
        }
    }
    document.writeln("<h1>Largest number is " +largest+ "</h1>");
    
    
    </script>
    </body>
    </html>