Javascript 一直在寻找数组中的最大数

Javascript 一直在寻找数组中的最大数,javascript,arrays,max,Javascript,Arrays,Max,我一直试图得到一个完整的数组来填充其中最大的数量,但我遇到了麻烦。 在我的HTML代码中,我有一个数字输入框,用户可以在其中输入数字,并在用户单击“按钮”后填充警报: 输入以空格分隔的数字。 点击这里获得最大数量! 警报框中的数字最大。 在我的JS代码中,只有当非数字是输入框中的第一个字符时,我才能让它识别parseFloat,例如,“i782”将在警报框中填充NaN,而“7i82”将只在警报框中填充7。 此外,我无法让它通过第一个空格“”。我完全被难住了,我也很困惑,如果我把警报放在var(

我一直试图得到一个完整的数组来填充其中最大的数量,但我遇到了麻烦。 在我的HTML代码中,我有一个数字输入框,用户可以在其中输入数字,并在用户单击“按钮”后填充警报:

输入以空格分隔的数字。
点击这里获得最大数量!
警报框中的数字最大。
在我的JS代码中,只有当非数字是输入框中的第一个字符时,我才能让它识别parseFloat,例如,“i782”将在警报框中填充NaN,而“7i82”将只在警报框中填充7。 此外,我无法让它通过第一个空格“”。我完全被难住了,我也很困惑,如果我把警报放在var(最大值)上,它只会返回0,但是当我放在警报(数组)中时,我至少得到了我输入的东西。我知道我在某个地方错过了一步,但我完全迷失了方向。 任何帮助都将不胜感激!!!谢谢

   var button = document.getElementById("greatestbutton");
     button.onclick = function greaterNumber() {
   var array = parseFloat(document.getElementById('numbers').value);
   var greatest = 0;
      for (i = 0; i < array.length; i++){

      if (array[i] > greatest){ 

    var greatest = Math.max(array[i])};
  }
  alert(array);
  }
var-button=document.getElementById(“greatestbutton”);
button.onclick=函数greaterNumber(){
var array=parseFloat(document.getElementById('numbers').value);
var=0;
对于(i=0;i最大值){
var max=Math.max(数组[i]);
}
警报(阵列);
}

这里有几件事出了问题

对于初学者,您要做的是在输入框中查找数字的每个有效文本表示形式。这比听起来要复杂一点-你想支持负数吗?小数位

进入正则表达式,这是编程史上最有用的发明之一。使用正则表达式可以毫不费力地从字符串中提取所有有效的数字序列,如
abc-.02dflaxoe042xne+3.14-5
-0.2
042
+3.14
,和
-5
),也就是说,所有这些字符串都可以由
parseFloat
单独解析

这个正则表达式的作用是:

/[-+]?(\d+(\.\d+)?|\.\d+)/g
它匹配一个可选的前导
-
+
[-+]?
),后跟

  • \d+(\.\d+)
    :一个或多个十进制数字0-9(
    \d
    ),后跟一个小数点(
    \.
    )和一个或多个十进制数字

  • 小数点
    \。
    后跟一个或多个十进制数
第一个大小写匹配+3.2、-31、-0.0001、51或42-第二个匹配.2、.1或+0.31。第二个大小写有点不寻常(小数点前没有十进制数字),但因为
parseFloat
可以读取它们,所以我添加了它们

有些人可能会争辩说,有一种更简单的方法来写这个-我真的希望我可以结合非此即彼/或,但我无法找到一个更好的正则表达式来确保至少提供了一个数字字符。欢迎编辑

解析技巧,技巧,当你接近时,是首先解析出所有的数字子串,然后将每个数字子串解析成一个浮点数并进行比较。你有一些正确的想法,但仍然缺少一些东西

Math.max()
接受一个或多个数值参数,但不幸的是不能接受数组。如果可以,这会很有意义,但它不能。我没有尝试找到解决方法,尽管可能有一种,因为我必须解析每个数值字符串,我只接受了
max()
完全退出并使用
运算符

现在有一个通用的编程点:当你在寻找最大值时,不要假设从0开始搜索。在你的例子中,如果没有提供任何数字,或者所有的负数,那么最大值就是你的起点
0
——用户可能甚至没有输入。我初始化了我的
最大值
未定义
,然后在下面处理该情况

进一步的帮助:

var button = document.getElementById("greatestbutton");
button.onclick = function greaterNumber() {
使用一个变量来表示

document.getElementById("greatestbutton").onclick = function greaterNumber() {
您会注意到,您的输出
字段(顺便说一句,应该以
/>
结尾)都具有
id
,即
编号
——当然,您不能引用具有相同id的两个元素

最后,一个语义点(:-):作为标记语义原则的信奉者,我将要求您避免所有太常见的反模式,例如
。现在已经有了一个
标签,用户会被告知这是一个按钮,即使他们在盲文终端或其他类似设备上,
失去了这个语义含义,不管你用CSS做得多么漂亮。出于同样的原因,我将您的
替换为
标记(用于“键入的输入”)

以下是我的想法:

<script type='text/javascript'>
greaterNumber = function () {
    var array = document.getElementById('numbers').value.match(/[-+]?(\d+(\.\d+)?|\.\d+)/g)
    alert(array)
    if (!array || array.length <= 0) return; // no numbers at all!
    var greatest = undefined
    if (array.type == 'number') // only one number
    array = [array] // convert to array for simplicity
    for (var i in array) {
        array[i] = parseFloat(array[i])
        if (greatest == undefined || array[i] > greatest) greatest = array[i]
    }
    document.getElementById('greatest').innerHTML = greatest;
}
</script>
</head>
<body>
  <p>
    <label for="numbers">Enter numbers seperated by a space:</label>
    <input type="text" size="20" id="numbers" />
</p>
<p>
    <button id="greatestbutton" onclick="greaterNumber()">Click here to get the Greatest Number!</button>
</p>
<div>The greatest number is in the alert box: <kbd id="greatest">?</kbd>
</div>
</html>

greaterNumber=函数(){
var array=document.getElementById('numbers').value.match(/[-+])?(\d+(\。\d+)?\124;\。\ d+)/g)
警报(阵列)
如果(!array | | array.length最大值)最大值=数组[i]
}
document.getElementById('magest')。innerHTML=magest;
}

输入以空格分隔的数字:

点击这里获得最大数量!

警报框中的数字最大:?

请参见此处的工作示例:

我遗漏了一些内容。是否要将
numbers
值的内容解析为一个数字数组
parseFloat
不会做类似的事情。另外,两次声明
var-magest
也有点奇怪。只需声明一次,然后在不使用
var
声明的情况下使用它。正确,我想把这些数字作为一个数组来处理。我想确保它们是有效的数字,而不是字母或任何东西。这就是我使用parseFloat的原因。所以,如果我把最后一个var最大值保留为最大值,这对Calc有帮助吗?事实上,我只是在小提琴上试了一下,但没用,好吗
<script type='text/javascript'>
greaterNumber = function () {
    var array = document.getElementById('numbers').value.match(/[-+]?(\d+(\.\d+)?|\.\d+)/g)
    alert(array)
    if (!array || array.length <= 0) return; // no numbers at all!
    var greatest = undefined
    if (array.type == 'number') // only one number
    array = [array] // convert to array for simplicity
    for (var i in array) {
        array[i] = parseFloat(array[i])
        if (greatest == undefined || array[i] > greatest) greatest = array[i]
    }
    document.getElementById('greatest').innerHTML = greatest;
}
</script>
</head>
<body>
  <p>
    <label for="numbers">Enter numbers seperated by a space:</label>
    <input type="text" size="20" id="numbers" />
</p>
<p>
    <button id="greatestbutton" onclick="greaterNumber()">Click here to get the Greatest Number!</button>
</p>
<div>The greatest number is in the alert box: <kbd id="greatest">?</kbd>
</div>
</html>