这里有一些事情出错了。
对于初学者来说,你想要做的是找到在输入框中输入一个号码的每一个有效的文字表述。这听起来有点棘手 - 你想支持负数吗?小数位?
输入正则表达式,在节目的历史上最有用的发明之一。使用正则表达式一个也可以,没有太大困难,从字符串中提取所有的有效的数值序列等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或+.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>
场(按顺序以/>
结尾),id
的numbers
- 当然你不能引用两个具有相同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/
我失去了一些东西。你是否想将数字值的内容解析为数字的数组? 'parseFloat'不会做那样的事情。此外,声明两次“var most”有点奇怪。只需声明一次,然后在没有'var'声明的情况下使用它。 –
正确,我想以数组的形式浏览数字。我想确保它们是有效的数字,而不是字母或任何东西。这就是我使用parseFloat的原因。所以如果我把最后一个变量最大限度地放在最大值,那么这对calcs有帮助吗?我其实只是在我的小提琴中尝试过,并没有奏效。 – user3348643