ホームページ > ウェブフロントエンド > jsチュートリアル > 提供された JavaScript 関数は、数値を含む文字列配列の自然な並べ替えをどのように実装しますか?

提供された JavaScript 関数は、数値を含む文字列配列の自然な並べ替えをどのように実装しますか?

Susan Sarandon
リリース: 2024-11-11 21:11:03
オリジナル
882 人が閲覧しました

How does the provided JavaScript function implement natural sorting of an array of strings containing numbers?

配列要素 (数値を含む文字列) の自然な並べ替え

数値を含む文字列の配列を意味のある方法で並べ替えるのは難しい場合があります。辞書順に並べ替えると、予期しない順序になることがよくあります。望ましい「自然な並べ替え」順序を実現するには、次のアプローチを使用できます。

解決策:

提供された JavaScript 関数は、naturalCompare と呼ばれるカスタム比較関数を使用します。その仕組みは次のとおりです:

  1. 文字列のトークン化:

    • この関数は、入力文字列をトークン化して、数値と文字を分離します。トークンはペアとして配列に保存されます。最初の要素は数値 (数値がない場合は無限大)、2 番目の要素は数値以外の文字です。
  2. 比較ループ:

    • を反復するループに入ります。 2 つの入力文字列のトークン。
    • 各反復で、トークン ペアの最初の要素 (数値) または 2 番目の要素 (文字) を比較します。
    • どちらかが大きい場合、関数は比較結果 (a は正、b は負) を返します。それらが等しい場合、次のペアに進みます。
  3. 不等なトークン長の処理:

    • がある場合いずれかのトークン配列内の静止要素、その長さの差が比較として返されますresult.

例:

このアプローチを使用して配列を並べ替える例を次に示します:

< ;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 &amp;&amp; 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート