2014-10-22 66 views
1

我需要对数组进行排序,以便返回最小值和最大值。我迄今为止编写的代码似乎没有做任何事情。JavaScript中数组的最小值和最大值

function sort(array) { 
    arrayNew = []; 
    maximum = array[0]; 
    minimum = array[0]; 

    for (i = 0; i < array.length; i++) { 
     if (maximum < array[i]) { 
      maximum = array[i]; 
     } 
    } 
    arrayNew.push(maximum); 

    for (i = 0; i < array.length; i++) { 
     if (minimum > array[i]) { 
      minimum = array[i]; 
     } 
    } 
    arrayNew.unshift(minumum); 
    return arrayNew; 
} 


var arr1 = [3, 8, 7, 6, 5, -4, 3, 2, 1]; 
alert(sort(arr1)); 
+0

你有一个拼写错误:'arrayNew.unshift(minumum);' – trnelson 2014-10-22 10:26:01

回答

1
  1. minumum拼写错误。它应该是minimum

  2. 不要使用您的变量,而不用var关键字声明它们。否则,他们将成为全球性财产。

  3. 另外,您也可以在与maximum相同的循环中进行最小检查。所以,你的代码可以缩短这样

    function sort(array) { 
        var maximum = array[0], 
         minimum = array[0], 
         i; 
    
        for (i = 0; i < array.length; i++) { 
         if (maximum < array[i]) { 
          maximum = array[i]; 
         } 
    
         if (minimum > array[i]) { 
          minimum = array[i]; 
         } 
        } 
        return [minimum, maximum]; 
    } 
    
  4. 现在我们知道,我们可以像这样做,让我们尝试用三元操作

    function sort(array) { 
        var maximum = array[0], 
         minimum = array[0], 
         i; 
    
        for (i = 0; i < array.length; i++) { 
         maximum = maximum < array[i] ? array[i] : maximum; 
         minimum = minimum > array[i] ? array[i] : minimum; 
        } 
        return [minimum, maximum]; 
    } 
    
+0

不是'(var i = 0'?特别是考虑到你的第二点? @thefourtheye? – Andy 2014-10-23 00:08:44

+1

@安迪哦,谢谢你指出:-) – thefourtheye 2014-10-23 03:21:32

0

arrayNew.unshift(minumum);更缩短错误的变量minimum

正确的:arrayNew.unshift(minimum);

+0

请仔细检查你的答案。这没有任何意义。 – 2014-10-23 03:30:10

+0

我检查了我的答案,他使用了错误的变量。 minumum不存在。 – 2014-10-23 05:58:05

2

如果你不知道还有一个更简单的方式来获得一个数组的最小值和最大值 - 使用Math.minMath.minapply

var min = Math.min.apply(null, arr1); 
var max = Math.max.apply(null, arr1); 

DEMO

+0

感谢您的回复,我知道Math对象,我只是试图将其作为一个“边”练习,我被分配了一个 – 2014-10-22 20:58:09

+0

即使我想到了这个,但后来我决定去循环。因为它在单次迭代中找到最大值和最小值。 – thefourtheye 2014-10-23 03:23:03

1
var arr = [ 3, 8, 7, 6, 5, -4, 31, 2, 21, 20, 1 ].sort(function(a, b) { return a - b }), // [-4, 1, 2, 3, 5, 6, 7, 8, 20, 21, 31] 
    min = arr[0], // min 
    max = arr[arr.length-1]; //max 
+0

javascript的默认排序是lexiographic而不是数字,该函数不适用于10以上的数字。是的OP使用相同的数组,但他们从来没有说他们被限制在这个集合。最好纠正后代。 – 2014-10-22 10:34:50

+1

使用排序功能更新了排序方法。 – boring 2014-10-22 10:45:09