2016-01-22 39 views
0

我使用以下代碼來計算由用戶提供的三個數字的GCD:從GCD計算刪除第三輸入如果留空

$('#calc').click(function(){ 

Math.GCD = function(numbers) { 
    for (var i = 1 ; i < numbers.length ; i++){ 
    numbers[0] = twogcd(numbers[0], numbers[i]); 
    } 
    return numbers[0]; 

    function twogcd(first, second) { 
    if (first < 0) first = -first; 
    if (second < 0) second = -second; 
    if (second > first) {var temp = first; first = second; second = temp;} 
    while (true) { 
     first %= second; 
     if (first == 0) return second; 
     second %= first; 
     if (second == 0) return first; 
    } 
    } 
}; 

Math.LCM = function(first,second) { 
    return first * (second/this.GCD(first, second)); 
}; 

var first = document.getElementById("first").value; 
var second = document.getElementById("second").value; 
var third = document.getElementById("third").value; 

var numbers = [first,second,third]; 

var GCDresult = Math.GCD(numbers); 


alert(GCDresult); 
}); 

與HTML:

<FORM NAME="calc" method="POST"> 

<button TYPE="button" ID="calc">CALC</button> 
<input type="text" name="stuff[]" class="input-field" id="first"/> 
<input type="text" name="stuff[]" class="input-field" id="second"/> 
<input type="text" name="stuff[]" class="input-field" id="third"/> 

</FORM> 

然而,我希望此表格根據用戶輸入的內容來計算2和3數字的GCD。因此,如果一個字段留空,那麼null字段將被忽略,並且GCD計算將繼續進行兩個輸入。但是,我不能相對於JavaScript來說不熟悉如何排除空白字段。

小提琴:https://jsfiddle.net/tjj7won4/40/

我怎麼可能改變的代碼考慮到這一點?

回答

1

更新你的代碼。添加了對第一個輸入字段isEmpty的檢查。如果是,則爲其分配一個下一個nonEmpty輸入字段的值。

更新JS:

$('#calc').click(function(){ 

Math.GCD = function(numbers) { 
    for (var i = 1 ; i < numbers.length ; i++){ 
    if(numbers[0]==""){ 
      $.each($('.inputField'),function(){ 
      if($(this).val()!=""){ 
       numbers[0] = $(this).val(); 
       return false; 
      } 
     }); 
    } 
    if(numbers[0]!="" && numbers[i]!=""){ 
     numbers[0] = twogcd(numbers[0], numbers[i]) 
    } 
    } 
    return numbers[0]; 

if (numbers[i] === '' || numbers[i] === 0) { 
    numbers[0] = twogcd(numbers[0], numbers[i]) 
    }; 
    function twogcd(first, second) { 
    if (first < 0) first = -first; 
    if (second < 0) second = -second; 
    if (second > first) {var temp = first; first = second; second = temp;} 
    while (true) { 
     first %= second; 
     if (first == 0) return second; 
     second %= first; 
     if (second == 0) return first; 
    } 
    } 
}; 

Math.LCM = function(first,second) { 
    return first * (second/this.GCD(first, second)); 
}; 

var first = $("#first").val(); 
var second = $("#second").val(); 
var third = $("#third").val(); 

var numbers = [first,second,third]; 

var GCDresult = Math.GCD(numbers); 


alert(GCDresult); 
}); 

update fiddle link

+0

怎麼樣的LCM功能? 'Math.LCM =函數(第一,第二){返回第一*(第二/ this.GCD(第一,第二)); };'我無法弄清楚如何將它擴展到兩個或三個數字場景。 – newbie2015

+0

這應該有所幫助:http://stackoverflow.com/questions/31302054/how-to-find-the-least-common-multiple-of-a-range-of-numbers# – smirfan

0

過濾掉非數值之前將其發送到GCD的功能,像

/* Filter out things that don't look like numbers */ 
var numbers = [first,second,third].filter(function (e, i, a) { /* e = element, i = index, a = array */ 
    return parseFloat(e); /* Is it numeric? */ 
}); 

演示

$('#calc').click(function(){ 
 

 
Math.GCD = function(numbers) { 
 
    for (var i = 1 ; i < numbers.length ; i++){ 
 
    numbers[0] = twogcd(numbers[0], numbers[i]); 
 
    } 
 
    return numbers[0]; 
 

 
    function twogcd(first, second) { 
 
    if (first < 0) first = -first; 
 
    if (second < 0) second = -second; 
 
    if (second > first) {var temp = first; first = second; second = temp;} 
 
    while (true) { 
 
     first %= second; 
 
     if (first == 0) return second; 
 
     second %= first; 
 
     if (second == 0) return first; 
 
    } 
 
    } 
 
}; 
 

 
Math.LCM = function(first,second) { 
 
    return first * (second/this.GCD(first, second)); 
 
}; 
 

 
var first = document.getElementById("first").value; 
 
var second = document.getElementById("second").value; 
 
var third = document.getElementById("third").value; 
 

 
/* Filter out things that don't look like numbers */ 
 
var numbers = [first,second,third].filter(function (e, i, a) { /* e = element, i = index, a = array */ 
 
\t return parseFloat(e); /* Is it numeric? */ 
 
}); 
 

 
var GCDresult = Math.GCD(numbers); 
 

 

 
alert(GCDresult); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<FORM NAME="calc" method="POST"> 
 

 
<button TYPE="button" ID="calc">CALC</button> 
 
<input type="text" name="stuff[]" class="input-field" id="first"/> 
 
<input type="text" name="stuff[]" class="input-field" id="second"/> 
 
<input type="text" name="stuff[]" class="input-field" id="third"/> 
 

 
</FORM>