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

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

1
你有没有读过关于JavaScript数组的任何内容? - Akshay Khandelwal
我是Javascript的新手,本周刚开始学习这一章节。 - Jessica
1
对于新手来说,这个问题格式非常好,而且它包含了你已经尝试过的信息以及代码。+1。请确保阅读关于页面,其中包含非常有用的信息 :) - Moritz Roessler
5个回答

2
  1. 你把数组和用来保存输入的临时变量混淆了。
  2. apply接受两个参数,上下文(在这种情况下无关紧要)和参数数组。

应该是这样的:

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)

=>

{{链接1:(Fiddle)}}


2

几个问题:

  • 数组是从0开始索引的。你通过从0开始计数跳过了第0个索引,这会破坏数组计算。(如果使用Math.max.apply(array, number)而不进行0索引,则可以正常工作)。
  • 您用每个提示覆盖了number变量,要么使用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>");

2
你只是缺少了Function.prototype.apply 中预期的 thisArg 参数。

根据 MDN 描述,语法如下:

fun.apply(thisArg[, argsArray])

如此简单的例子所示:

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

在示例中,null 没有特定的上下文,只是用来简化操作。你想要做的是将数组 number 传递给 Math.max,这将成为 thisArg(虽然你似乎将其与 Array 搞混了),最终会导致 Math.max 被调用且没有参数,根据 §15.8.2.11 的规定,结果为:

对于零个或多个参数,对每个参数调用 ToNumber 方法并返回值最大的结果。

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

1
<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>

最好还是添加一些代码来解释你实际做了什么。 - undefined

1

您的代码主要问题有:

  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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接