繁体   English   中英

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

[英]Finding Largest Element in an Array using JavaScript

我正在尝试编写一个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>

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

MDN描述的语法

fun.apply(thisArg [,argsArray])

如这个简单的例子所示

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

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

您要做的是将数组number传递给Math.max ,然后将其作为thisArg (尽管您似乎将其与Array thisArg ,这将导致Math.max中的任一方式被调用零参数,这会产生根据§15.8.2.11

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

  • 如果没有给出参数,则结果为-∞。
  1. 您正在将数组与temp变量混合以保存输入。
  2. apply接受两个参数,即上下文(在本例中不相关)和arguments数组。

应该是这样的:

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);  

(小提琴)

几个问题,

  • 数组为0索引。 您通过将计数器设置为0来跳过0索引,这将搞乱阵列计算。 (如果你使用Math.max.apply(数组,数字),它将在没有0索引的情况下工作)。
  • 你用每个提示覆盖了数字变量,或者使用window.prompt来输入parseInt或者将它输入到temp变量中。
  • 你有一个不正确的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>");
<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>

您的代码的主要问题是:

  1. 你错过了Math.max.apply函数调用中的this参数
  2. 每次从用户读取新值时,您都在销毁number数组。 您需要为用户输入使用单独的变量。

但是,您根本不需要为此任务构建数组。 在循环内部,只需将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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM