2014-10-22 99 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