2016-02-09 55 views
0

在JavaScript(或許多其他語言)中,有一種像Array.prototype.sort這樣的方法。它需要一個參數,其功能如下:記住參數比較函數的順序有什麼訣竅?

array.sort(compare) 

假設我想按升序排列數組。我如果函數應該看起來像這是一個非常艱難的時間記住:

array.sort(function compare(a,b){ 
    if (a < b){ return -1 } 
    if (a > b){ return 1 } 
    return 0; 
}) 

或類似這樣的

array.sort(function compare(a,b){ 
    if (a < b){ return 1 } // NOTE that -1 and 1 are swapped here! 
    if (a > b){ return -1 } 
    return 0; 
}) 

我厭倦了谷歌搜索這所有的時間。記住它有沒有一個技巧或助記符?

+0

我從標準數字比較'(a,b)=> a-b'推導出它,當我需要它時。 – Bergi

回答

2

規則:按升序順序排序,如果比較函數的第一個參數是更大的,返回1

這裏的關鍵詞是「上升」,「第一」,「做大」和「1」。在每種情況下,想一下什麼是「更好」:

  • 「升序」更好。想到「爬梯子」和「迎接挑戰」。
  • 「第一」更好。認爲「先行」和「第一位」。
  • 「越大」越好。陳詞濫調已經存在。 「Nuff說。
  • 「Positive」更好。認爲「積極的態度」和「積極的成果」。 (另外, 「加」 也更好認爲 「這是一大利好。」)

然後爲你寫你的代碼,你可以認爲以下的:

var array = [3,2,1,2]; 
 

 
document.write('unsorted array: ' + array + '</br>'); 
 

 
var POSITIVE = 1; 
 
var SAME  = 0; 
 
var NEGATIVE = -1; 
 

 
array.sort(function compare(firstParam, secondParam) { 
 

 
    var theyAreTheSame = (firstParam === secondParam); 
 
    // that shouldn't require any memory aid 
 

 
    var firstIsBigger = (firstParam > secondParam); 
 

 
    if  (theyAreTheSame) return SAME 
 
    else if (firstIsBigger) return POSITIVE // the key line 
 
    else      return NEGATIVE; 
 

 
}); 
 

 
document.write('sorted array: ' + array);

這導致了以下內容:

  • 要按更好的順序(即升序之一)...
  • ...如果更好的參數(即,第一個)...
  • ...是更好的相對大小(即更大)...
  • ...然後應該從比較函數返回更好的值(即正值)。

(聲明:我並沒有這個記憶幫助其他語言,甚至其他功能的實用要求,但是,嘿,希望它可以幫助別人與JavaScript的數組排序)

更新:通過用'var'替換'let'和'const'來修復代碼(即對於變量聲明,從ES6恢復爲ES5),以便代碼不僅可以在Firefox中使用,還可以在Chrome和Safari中使用。 (我還沒有檢查Internet Explorer或其他瀏覽器。)