2015-07-11 29 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; 
}