2016-06-14 5 views
1

私はJSの本の例についていません。ここには、矢印機能があります。うまく動作しますが、関数が参照する変数は何ですか?どのように "a、b"と何をするべきかを知っていますか? ab矢印機能。関数が参照する変数

私は舞台裏で何が起こっているか理解していない...

const arr = [{ 
 
    name: "Suzanne" 
 
}, { 
 
    name: "Jim" 
 
}, { 
 
    name: "Trevor" 
 
}, { 
 
    name: "Amanda" 
 
}]; 
 

 
// arr sorted reverse alphabetically 
 
// by second letter of name property 
 

 
console.log(arr.sort((a, b) => a.name[1] < b.name[1]));

+4

これは矢印の機能に関するものではありません。 'sort'は高次関数であり、2つの引数で呼び出されるコールバックをとります。 'a'と' b'はあなたが望むものに名前をつけることができます。 – elclanrs

+0

この本は本当に 'arr.sort((a、b)=> a.name [1]

+0

それはありますか?私は、 '{}'をラップすることを省略した矢印関数が自動的に戻ると考えました。編集:それは動作します(私は 'name [1]'ではなく 'name [0]'でソートします) – pmilla1606

答えて

4

値は、あなたの矢と呼ぶものであるArray#sort機能によって決定されています関数。これは通常の関数と同じです。例えば、あなたのコードは次のように同じように動作します:

function Array_sort(callback) { 
    // ... 

    while (not_done_sorting_yet) { 
     // ... 
     result = callback(element[x], element[y]); // The call to your callback 
     // ...code using result... 
    } 

    // ... 
} 

ただ、実際には任意のコールバック(と同じように、任意の関数:

console.log(arr.sort(function(a, b) { 
    return a.name[1] < b.name[1]; 
}); 

Array#sortの内部では、あなたのコールバックの呼び出しを想像することができます)、コードを呼び出して、取得する引数とその値を決定するコードをと呼びます。 (簡略化のための部分的なアプリケーションを無視する。)


BTW:a場合0:このコードが間違っている、sortコールバック関数からの戻り値が番号なく、ブーリアンであると考えられますbがソートの目的で等しい場合、0より小さい値はaはソートの目的でbより小さい(bの前に来なければなりません)、aが ""より大きい場合は0より大きくなります)。

ここでは、正しいバージョン(配列のためには、[引用されたコード内のコメントから]「nameプロパティの第二の手紙アルファベット順にソートリバース」)です:

// Reverse alpha by second letter in name 
console.log(arr.sort((a, b) => b.name[1].localeCompare(a.name[1]))); 

... String#localeCompareは適切な値を返しますので、あなたがそれを呼び出す文字列が、あなたがそれを呼び出す文字列の「より小さい」か「より大きい」かどうかを判断します。 (name[1]は1文字の文字列です)

関連する問題