這裏有一些事情出錯了。
對於初學者來說,你想要做的是找到在輸入框中輸入一個號碼的每一個有效的文字表述。這聽起來有點棘手 - 你想支持負數嗎?小數位?
輸入正則表達式,在節目的歷史上最有用的發明之一。使用正則表達式一個也可以,沒有太大困難,從字符串中提取所有的有效的數值序列等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