JavaScript での英数字文字列の自然なソート 質問する

JavaScript での英数字文字列の自然なソート 質問する

数字とテキスト、およびそれらの組み合わせで構成される配列を並べ替える最も簡単な方法を探しています。

例えば、

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

になる

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

これは、ここで私が尋ねたもう一つの質問

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

私はこれを JavaScript で書いています。

自然なソートのための関数を探しています。

ベストアンサー1

これは、現代のブラウザで可能になりました。ロケール比較。オプションを渡すとnumeric: true、数字を賢く認識します。大文字と小文字を区別しない場合は、 を使用しますsensitivity: 'base'。Chrome、Firefox、およびインターネットエクスプローラー11

以下に例を示します。 を返します。1つまり、10 は 2 の後になります。

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

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

大きな配列をソートする場合など、多数の文字列を比較する場合は、Intl.Collat​​or オブジェクトを作成し、その 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));

おすすめ記事