配列要素 (数値を含む文字列) の自然な並べ替え
数値を含む文字列の配列を意味のある方法で並べ替えるのは難しい場合があります。辞書順に並べ替えると、予期しない順序になることがよくあります。望ましい「自然な並べ替え」順序を実現するには、次のアプローチを使用できます。
解決策:
提供された JavaScript 関数は、naturalCompare と呼ばれるカスタム比較関数を使用します。その仕組みは次のとおりです:
文字列のトークン化:
比較ループ:
不等なトークン長の処理:
例:
このアプローチを使用して配列を並べ替える例を次に示します:
< ;pre>
関数 NaturalCompare(a, b) {
// Tokenization var ax = [], bx = []; a.replace(/(\d+)|(\D+)/g, function(_, , ) { ax.push([ || Infinity, || ""]) }); b.replace(/(\d+)|(\D+)/g, function(_, , ) { bx.push([ || Infinity, || ""]) }); // Comparison 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; } // Handling unequal length return ax.length - bx.length;
}
// テスト配列の並べ替え
let arr = ["IL0 Foo", "PI0 Bar", "IL10 Baz", "IL3 ボブは言うhello"];
arr.sort(naturalCompare);
console.log(arr);
出力:
[
"IL0 フー",
"IL3 ボブは言いますこんにちは"、
"IL10 バズ"、
"PI0 バー"
]
以上が提供された JavaScript 関数は、数値を含む文字列配列の自然な並べ替えをどのように実装しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。