1. ホーム
  2. ジャバスクリプト

[解決済み】Javascript : 英数字の文字列の自然なソート

2022-04-04 07:46:51

質問

数字とテキスト、およびこれらの組み合わせからなる配列をソートする最も簡単な方法を探しています。

'123asd'
'19asd'
'12345asd'
'asd123'
'asd12'

に変わります。

'19asd'
'123asd'
'12345asd'
'asd12'
'asd123'

の解決策と組み合わせて使用することになります。 ここで質問した別の質問 .

ソート機能自体は動作しますが、必要なのは「19asd」が「123asd」よりも小さいと言える機能です。

JavaScriptで書いています。

編集:として 概要 ご指摘の通り、私が求めているのは自然なソートのための機能です。

どのように解決するのですか?

モダンブラウザでは、localeCompareを使用することで可能になりました。を渡すことで numeric: true オプションを使用すると、数字をスマートに認識することができます。大文字・小文字を区別しない場合は sensitivity: 'base' . Chrome、Firefox、IE11でテストしています。

以下はその例です。これは 1 つまり、2の次には10が来るということです。

'10'.localeCompare('2', undefined, {numeric: true, sensitivity: 'base'})

大量の文字列をソートする際のパフォーマンスのために、記事によると

大きな配列のソートなど、大量の文字列を比較する場合は、Intl.Collatorオブジェクトを作成し、そのcompareプロパティが提供する関数を使用する方がよいでしょう。 ドキュメントリンク

var collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'});
var myArray = ['1_Document', '11_Document', '2_Document'];
console.log(myArray.sort(collator.compare));