2017-02-26 9 views
-1
function compare(a, b) { 
    if (a is less than b by some ordering criterion) { 
    // how minus 1 will affect to sort? how sort will understand this value? 
return -1; 
    } 
    if (a is greater than b by the ordering criterion) { 
    return 1; 
    } 
    // a must be equal to b 
    return 0; 
} 

または次の例のためにどのように影響するかを理解することはできません。は、私が「戻り」の値がソート

var numbers = [4, 2, 5, 1, 3]; 
numbers.sort(function(a, b) { 
    return a - b; 
}); 
console.log(numbers); 

// [1, 2, 3, 4, 5] 

私は唯一の1と0である、「true」または「false」を知っている知っています。そして、それが何であるか(1、-1、0)を理解し、これらの値を使って並べ替えをどのように並べ替えるか

+0

http://stackoverflow.com/questions/6567941/how-does-sort-function-work-in-javascript-along-with-compare-function – yakobom

+2

の重複している可能性があります[JavaScriptのソート機能はどのように機能しますか、一緒に比較機能](http://stackoverflow.com/questions/6567941/how-does-sort-function-work-in-javascript-along-with-compare-function) – SOFe

答えて

0

documentation at MDNはかなりこれを説明:compareFunction(比較関数)が与えられている場合

arr.sort(compareFunctionは)

を、配列の要素は比較関数の戻り値に応じ ソートされます。 aとbが比較さ 二つの要素である場合、その後:

  • compareFunctionはIF(a、b)は、すなわち、Aが最初に来る、ソートA低いインデックスbより、0未満です。
  • compareFunction(a、b)が0を返す場合は、aとbは互いに変更せずに、すべての 異なる要素に対してソートします。注:ECMAscript標準では
    にこの動作が保証されていないため、すべてのブラウザ(Mozilla
    のバージョンは少なくとも2003年の日付)がこれを遵守しているわけではありません。
  • compareFunction(a、b)が0より大きい場合、bをaより小さいインデックスにソートします。 compareFunction(a、b)は、特定の要素のペアaとbを引数2つの として指定した場合、常に同じ の値を返す必要があります。一致しない結果が返された場合、ソート順 は未定義です。
+0

ありがとう、それは本当に私を助けた – Dos

1

Array.prototype.sort関数がコールバック番号ではなく、ブール値を返すことを期待(例えば、ないtrue又はfalse)。この番号を使用して、ソートコールバックに与えられた2つのエントリの順序を知る。あなたはこれらの線に沿っているsort内のロジックを想像することができます:あなたが見ることができるように

result = callback(a, b); 
if (result < 0) { 
    // Make sure `a` is before `b` 
} else if (result > 0) { 
    // Make sure `b` is before `a` 
} else { 
    // It doesn't matter which is first, they're equivalent 
} 

truefalseは(<または>の結果としてを除く)は関与していません。

そして、それはa未満bであれば、結果は負になりますので、a場合とbは数字であり、コールバックがa - bを返し、それは数値的にソートすることを意味します。 abより大きい場合、結果は肯定的です。同じ場合は0となります。