LoginSignup
1
0

JavaScriptのsortについて

Posted at

JavaScriptのsortについて、結果が出力されるまでの動きが理解できていなかったので記事にしました。
まだ経験が浅いため、認識に間違いがありましたらコメント頂けますと幸いです。

下記コードは引数として' 'で区切られた値の中から最も短い文字列の値を出力するコードです。
コードを実行した際に出力される結果は'5'となります。

function shortest(str) {
  let splitWord = str.split(' ').sort(function(a, b) {
    let result = a.length - b.length
    return result
  });
  return splitWord[0].length
}
console.log(shortest('osaka aomori akita kanagawa'))
// console.logの出力結果は'5'

a, bには配列に変換された'osaka aomori akita kanagawa'が入ってきます。

sort(function(a, b) // 2行目

a         |b
ーーーーーーーーーーーーーーーーーーーー
osaka(5)  |aomori(6)   // 1回目
osaka(5)  |akita(5)    // 2回目
aomori(6) |akita(5)    // 3回目
osaka(5)  |kanagawa(8) // 4回目
aomori(6) |kanagawa(8) // 5回目

// ()の中は文字の長さ

入ってきたデータを元の文字列の長さをもとに計算をします。
1回目 'osaka'の方が1文字少ないので、['osaka', 'aomori']の順となります。
2回目 '0'となるので、['osaka', 'akita']が並列の順となります。
3回目 'aomori'の方が1文字多くなるので['osaka', 'akita', 'aomori']の順となります。
4回目 'osaka'の方が3文字少ないので、'osaka', 'akita'よりも後に並ぶことが確定します。
5回目 'aomori'の方が2文字少ないので、'aomori'よりも後に並ぶことが確定します。
結果   splitWordは['osaka', 'akita', 'aomori', 'kanagawa']となります。

let result = a.length - b.length // 3行目

result
ーーーーーーーーーーー
-1 // 1回目  ['osaka', 'aomori']
0  // 2回目 ['osaka', 'akita']
0  // 3回目 ['aomori', 'akita']
-3 // 4回目 ['osaka', 'kanagawa']
-2 // 5回目 ['aomori', 'kanagawa']

['osaka', 'akita', 'aomori', 'kanagawa']に並び変えられたインデックス'0'の文字数を取得すれば、最も短い文字列の値を求めることができるようになります。

以上です。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0