1. gems.sort((a, b) => a > b);
2. gems.sort((a, b) => a.localeCompare(b));
3. gems.sort((a, b) => b - a);
4. gems.sort((a, b) => a.charCodeAt(0) - b.charCodeAt(0));
回答
正解
2. gems.sort((a, b) => a.localeCompare(b));
実行結果
['diamond', 'emerald', 'Ruby', 'Sapphire']
解説
.sort() のデフォルトは、**辞書順ではなく「文字列を文字コードとして昇順」**です。
つまり "sapphire" の s は、"ruby" の r よりも文字コードが後にあるので、最後に来ます。
.sort((a, b) => a > b) は true/false(つまり 1/0)しか返さず、正しい比較関数になりません!
localeCompare は文字列の自然な比較を行い、昇順・降順の制御に向いています。
学習ポイント
.sort() は「正しく比較関数を渡さないとバグる」
a > b は比較ではなく、「順序関数としては機能しない」
localeCompare は文字列を人間にとって自然な順序で並べたいときの武器
0 件のコメント:
コメントを投稿