GASの配列要素を自然言語順に並び替えるコード(コピペで使える)

GASの配列を並び替えたい時は多くあります。

sort関数を使うことで並び替えることができますが、簡単にできるのは数字を昇順、降順に並び替えるところまでです。

ただ、実際に使いたいのは、自然言語(あいうえお順、item1,item2...のように文字の中に数字が入っているパターン)の順に並び替えたい時が多いです。

今回は、GASの配列の要素を、自然言語順に並び替えることができるコードを紹介します。

並び替えることができる配列例

①abcd順
"Lily" , "Asuly" , "Tom" , "Mike"

②あいうえお順
'あべ','あいだ','さとう','たなか','きくち'

③文字と数字が混じっている場合
item1 , item4 , item3 , item8, ....

あべべ

このような配列要素を並び替えることができます。

コード(コピペで使用可能)

では、さっそくコードを紹介します。

2つの関数を使用しますので、それぞれコピペしてください。

2つの関数は、それぞれ以下の通りです。

使用する二つの関数の説明

①naturalSort関数
sortメソッドに渡す比較関数です。
各文字列を数値と被数値の部分に分割し、それらを比較することで自然言語順にソートします。

数値がある場合は、数値を数値として比較し、それ以外の文字はlocaleCompareを使用して比較します。

②myFunction関数
sortメソッドを実行し、配列を入出力する関数です。

では、実際コードです。

実際のコード

function naturalSort(a, b) {
  var ax = [], bx = [];

  a.replace(/(\d+)|(\D+)/g, function(_, $1, $2) {
    ax.push([$1 || Infinity, $2 || ""])
  });
  b.replace(/(\d+)|(\D+)/g, function(_, $1, $2) {
    bx.push([$1 || Infinity, $2 || ""])
  });
  
  while(ax.length && bx.length) {
    var an = ax.shift();
    var bn = bx.shift();
    var nn = (an[0] - bn[0]) || an[1].localeCompare(bn[1]);
    if(nn) return nn;
  }

  return ax.length - bx.length;
}

function myFunction() {
  var array = ['あべ','あいだ','さとう','たなか','きくち'];
  array.sort(naturalSort);
  console.log(array); // 出力: [あいだ, あべ, きくち, さとう, たなか]
}

例えば、コード上では配列の中に名前が書かれた要素が入っています。

['あべ','あいだ','さとう','たなか','きくち']

これらを代入してみると、出力はあいうえお順になります。

文字と数字が混じった配列要素の場合 ["item3" , "item2" , "item10" , "item8" ]

文字と数字が混じっている場合でも、数字を基準にして並び替えることができます。

また、文字を変えても並び替えることができます。

まとめ

今回は、GASの配列の中身を自然言語順に並び替える方法について解説しました。

関数は使い回すことができるので、ぜひ機会があれば使ってみてください!

では、良い自動化ライフを。またどこかでお会いしましょう。

(Visited 6 times, 1 visits today)