2014-03-03 89 views
0

找到一个最大/数量最多,我一直试图让整个数组内它填充的最大数,我绊脚石。 在我的HTML代码中,我有很多的输入框,用户可以输入并警告填入一旦上了“按钮”,用户点击:滞留在阵列

<label for="numbers">Enter numbers seperated by a space.</label><input type="text" size="20" id="numbers"> 

<div id="greatestbutton" class="button">Click here to get the Greatest Number!</div> 

<div>The greatest number is in the alert box.<span id="numbers"></span></div> 

在我的JS代码,我可以得到它的认可在parseFloat,只有当非数字是在输入框中输入的第一个字符,例如“i782”将填充楠警告框,但“7i82”,将只在警告框填充7。 此外,我无法让它通过第一个空间“”。我彻底难倒了,我也搞不清楚,如果我把警报的VAR(最大),它只是回来为0,但是当我把警报(阵列),我至少让我HVE输入了什么东西。我知道我错过了某个步骤,但我完全失败了。 任何帮助将不胜感激!谢谢!!。

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); 
    } 
+1

我失去了一些东西。你是否想将数字值的内容解析为数字的数组? 'parseFloat'不会做那样的事情。此外,声明两次“var most”有点奇怪。只需声明一次,然后在没有'var'声明的情况下使用它。 –

+0

正确,我想以数组的形式浏览数字。我想确保它们是有效的数字,而不是字母或任何东西。这就是我使用parseFloat的原因。所以如果我把最后一个变量最大限度地放在最大值,那么这对calcs有帮助吗?我其实只是在我的小提琴中尝试过,并没有奏效。 – user3348643

回答

1

这里有一些事情出错了。

对于初学者来说,你想要做的是找到在输入框中输入一个号码的每一个有效的文字表述。这听起来有点棘手 - 你想支持负数吗?小数位?

输入正则表达式,在节目的历史上最有用的发明之一。使用正则表达式一个也可以,没有太大困难,从字符串中提取所有的有效的数值序列等abc-.02dflaxoe042xne+3.14-5-0.2042+3.14,和-5,那就是 - 所有这些都可以通过parseFloat单独被解析

此正则表达式的伎俩:

/[-+]?(\d+(\.\d+)?|\.\d+)/g 

它匹配的可选领先-+[-+]?),随后

  • \d+(\.\d+)?:一个或多个十进制数字0-9(\d)任选地随后进行小数点(\.)和一个或多个十进制数字

  • 小数点\.接着是一个或多个十进制数字

第一个案例匹配+3.2,-31,-0.0001,51或42 - 第二个匹配.2,-.1或+.31。第二种情况有点不寻常(小数点前没有十进制数字),但是因为parseFloat可以读取它们,所以我将它们加入。

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

解析把戏,把戏,因为你正在接近,是先分析出所有的数字串,那么每个解析为一个浮点数和比较。你有一些正确的想法,但仍有一些缺失。

Math.max()采用一个或多个数值参数,但不能把一个阵列,可惜。如果可以的话,它会很有意义,但它不能。我没有试图找到解决办法,尽管可能有一个,因为我必须解析每个数字字符串,我只是完全取出max(),并使用>运算符代替。

通用的编程点现在:当你正在寻找最伟大的,不要作假设像为0。在您的例子开始搜索,如果没有数字供电,或全部负数,那么最大数是您的出发点0 - 用户可能甚至没有输入。我将我的greatest初始化为undefined,然后处理下面的情况。

提供进一步的帮助了一下:

var button = document.getElementById("greatestbutton"); 
button.onclick = function greaterNumber() { 

是使用可变长的方式来表达

document.getElementById("greatestbutton").onclick = function greaterNumber() { 

你会发现,你有两个输出<span><input>场(按顺序以/>结尾),idnumbers - 当然你不能引用两个具有相同ID的元素。

最后,一个语义点(:-)):作为标记语义原理的相信者,我会要求您避免使用所有常见的反模式,例如<div id="greatestbutton" class="button">。已经有一个<button>标记,并且即使用户在盲文终端或其他此类设备上,用户也会被告知它是一个按钮 - 无论您使用CSS如何漂亮,<div class='button'>都会失去此语义。出于同样的原因,我将<span>替换为<kbd>标签(用于“输入输入”)。

这就是我想出了:

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

看到这里工作的例子:http://jsfiddle.net/7JN74/10/

+0

好的,我仍然试图在我的最后完全理解和迷失。对不起,js新手。如果我不需要担心分歧和否定,我需要吗? value.match(/ [ - +]?(\ d +(\。\ d +)?| \。\ d +)/ g) alert(array) – user3348643

+0

好的,所以我尝试了一种不同的方式, var button = document.getElementById(“greatestbutton”); button.onclick = function greaterNumber(){ var myArray = new Array(parseFloat(document.getElementById('numbers')。value)); var largest = 0; (i = 0; i greatest){ var myGreatest =(myArray [i]) }; } alert(myGreatest); }这是我的小提琴:http://jsfiddle.net/jminery/VRTax/2/ – user3348643