2015-07-11 26 views
0

我想編寫一個JavaScript函數,它查找最大和最小數字之間的差異。輸入可能是任何數字,所以我使用arguments任何數字的Javascript差異

我寫了一個最大和最小功能,他們單獨工作正常。我已經把它們放在差分函數中來計算最大最小值並返回結果。 但某處存在錯誤,代碼未按預期運行。

<!DOCTYPE html> 
<html> 
<body> 

<p>Finding the difference.</p> 
<p id="demo"></p> 

<script> 

function difference() { 
var diff = 0; 

function findMax() { 
    var i, max = 0; 
     for(i = 0; i < arguments.length; i++) { 
      if (arguments[i] > max) { 
      max = arguments[i]; 
     } 
    } 
    return max; 
} 

function findMin() { 
    var i, min=Infinity; 
     for(i = 0; i < arguments.length; i++) { 
      if (arguments[i] < min) { 
      min = arguments[i]; 
     } 
    } 
    return min; 
} 
diff=max-min; 
return diff; 

} 

document.getElementById("demo").innerHTML = difference(4, 5, 6,88); 

</script> 

</body> 
</html> 
+2

你不會在任何地方調用'findMax()'和'findMin()'函數。 – JJJ

+1

另外,如果你想正確處理負數,'var i,max = 0'應該是'var i,max = -Infinity'。 – einarmagnus

回答

0

如果由於某種原因你想利用你現有的findMin()findMax()方法,你只缺少了這些方法的調用。

裏面difference(),你應該這樣做:

var numbers = Array.slice(arguments); // create an array of args 
var max = findMax.apply(this, numbers); 
var min = findMin.apply(this, numbers); 
return max - min; 

並通過評論,如果你想處理負數的建議不解決您的findMax()方法。

2

試試這個

function difference() { 
    var i, val = parseFloat(arguments[0]), min = val, max = val; 

    for(i = 1; i < arguments.length; i++) { 
     val = arguments[i]; 
     min = Math.min(val, min); 
     max = Math.max(val, max); 
    } 
    return max - min; 
} 

不需要無限要麼

+0

我想你應該檢查'arguments'是否爲空,並且檢查'arguments'中的其餘值實際上是數字。 – Pandacoder

0

你能做到在一個for循環更容易:

var numbers = [4, 8, 1, 100, 50]; 

function difference(arr) { 
    var max = arr[0] 
    var min = arr[0]; 
    for(var i = 0; i < arr.length; i += 1) { 
     if(arr[i] > max) { 
      max = arr[i]; 
     } 
     if(arr[i] < min) { 
      min = arr[i]; 
     } 
    } 
    var d = max - min; 
    return d; 
} 

var result = difference(numbers); 
console.log(result); 
2

你永遠不會調用要麼findMin()findMax()

您可以使用builtins Math.min()Math.max()來代替它們,它們都採用無限數量的參數,因此您可以避免自己迭代參數。

像這樣:

function difference() { 
    var min = Math.min.apply(null, arguments), 
     max = Math.max.apply(null, arguments); 

    return max - min; 
}