2014-03-03 93 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