2012-01-22 7 views
2

以下のオブジェクトに関連する以下の意味を理解するために、私はウェブを梳きました。 "a"と "b"はどういう意味ですか?それはなぜ重要ですか?多次元配列のカスタムソート関数はどのように機能するのですか

私は時に無名関数は-1,0,1の値を返しますが、私は(例えば employees.sort(a.something, b.something)など)任意の値を渡すことはありませんので、引数 abの意義は何であることを理解し
students.sort(function(a, b){ 
    return a.fn-b.ln 
}) 

var students = [{ 
    fn : "Stone", 
    ln : "Carpenter", 
    scores : [61,99,73,68,80,62,176,78] 
}, 
{ 
    fn : "Samson", 
    ln : "Sears", 
    scores : [68,193,91,190,95,65,171,75] 
}, 
{ 
    fn : "Quin", 
    ln : "Morton", 
    scores : [79,95,161,92,182,163,198,182] 
}, 
{ 
    fn : "Qunitessa", 
    ln : "Hardy", 
    scores : [99,65,75,69,77,67,86,78] 
}, 
{ 
    fn : "Ashley", 
    ln : "England", 
    scores : [147,70,81,64,148,71,70,63] 
}, 
{ 
    fn : "Thaddeus", 
    ln : "Hutchinson", 
    scores : [99,190,188,185,160,88,89,76] 
}, 
{ 
    fn : "Yeo", 
    ln : "Hayes", 
    scores : [88,64,199,165,198,76,74,81] 
}, 
{ 
    fn : "Rylee", 
    ln : "Larson", 
    scores : [71,126,63,71,168,173,175,88] 
} 
]; 

私は関数を呼び出します。上記のデータでは、私のテーブルのヘッダの1つをクリックすることでソートする必要があります。これには、文字列と数値のソートが含まれます。どのように "スコア"配列の入れ子にされた値を並べ替えるかに関する任意のアイデアですか?どのように私は姓または名を並べ替えるつもりですか?

+0

https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Array/sortを参照してください。 "a"と "b"はいくつかのソート可能なペアの要素を指します。 sort algoは、配列内の各項目に対してこのルールを使用します。 –

答えて

0

配列のsortメソッドは、ソート関数を使用して、必要に応じて2つの要素を比較し、ソート順を決定するときに適用します。 abは、ソートする配列の2つの要素になります。

姓のアルファベット順にオブジェクトを並べ替えるには、あなたはこの1つのようなソート機能が必要になります。

あなたのソートは大文字と小文字を区別したい場合は.toLowerCase()を削除します。 「姓、名」のようなもののためにソートするには、代わりに以下の行を使用します。

var sortFieldA = (a.ln + ", " + a.fn).toLowerCase(); 
    var sortFieldB = (b.ln + ", " + b.fn).toLowerCase(); 

をまた、あなたのデータのすべてのエントリでソートを実行する必要がありますあなたのデータでスコアをソートするにはセット:sortは、デフォルトでは、数値ソート順を使用しますので、あなたは、この場合には、明示的なソート機能を必要としない

for (var i = 0; i < students.length; i++) { 
    var student = students[i]; 
    student.scores.sort(); 
} 

注意。

+0

素晴らしいですが、要素をパラメータとして渡していない場合、関数は要素を取得してソート順を決定しますか?それとも私ですか? – jjhenry

+0

あなたの配列 'students.sort(...)'に対して 'sort'メソッドを明示的に呼び出し、ソート関数を渡しています。次に、配列の 'sort'メソッドはあなたの関数を取り出し、必要に応じて要素に適用します。 –

+0

ありがとうございます。私がやっているのは、動的テーブルを作成することです。テーブルヘッダーを使用して並べ替える機能が必要です。ネストされた配列内のデータをソートするのが難しいです。入れ子にされた最初の値、ネストされた2番目の値などで配列をソートしたいと思います。 スコア:[99,190,188,185,160,88,89,76] 99が最初の列、190が2番目の列などとなります。 – jjhenry

0

.sortがコールバックします。次に、配列から2つの要素を取り出し、コールバック関数に渡します。コールバック関数は、どの要素が大きいかを返します。 .sortは、その情報に基づいて配列内の2つの要素を並べ替えます。次に、2つの要素をとり、それらをコールバックに渡します。すすぎ、アレイがソートされるまで繰り返す。

aおよびbは、単に「要素」および「別の要素」の変数です。あなたの好きなものを呼び出してください。命名には意味がありません。

関連する問題