Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

JavaScriptで数字と英数字の混合配列を並べ替える方法


このような英数字の文字列の配列があるとします-

const arr = ['A1', 'A10', 'A11', 'A12', 'A3A', 'A3B', 'A3', 'A4', 'B10', 'B2', 'F1', '1', '2', 'F3'];

唯一無二の引数など、1つの配列でJavaScript関数を作成する必要があります。

そして、関数はこの配列をインプレースでソートする必要があります-

  • 数字のみを含む文字列は、最初に昇順で並べ替える必要があります。
  • アルファベットと数字の組み合わせを含む文字列は、最初にアルファベットに従って、次に数字に従って昇順で並べ替える必要があります。

したがって、出力は次のようになります-

const output = ['1', '2', 'A1', 'A2', 'A3', 'A3A', 'A3B', 'A4', 'A10', 'A11', 'A12', 'B2', 'B10', 'F1', 'F3'];

const arr = ['A1', 'A10', 'A11', 'A12', 'A3A', 'A3B', 'A3', 'A4', 'B10', 'B2', 'F1', '1', '2', 'F3'];
const alphaNumericSort = (arr = []) => {
   const sorter = (a, b) => {
      const isNumber = (v) => (+v).toString() === v;
      const aPart = a.match(/\d+|\D+/g);
      const bPart = b.match(/\d+|\D+/g);
      let i = 0; let len = Math.min(aPart.length, bPart.length);
      while (i < len && aPart[i] === bPart[i]) { i++; };
         if (i === len) {
            return aPart.length - bPart.length;
      };
      if (isNumber(aPart[i]) && isNumber(bPart[i])) {
         return aPart[i] - bPart[i];
      };
      return aPart[i].localeCompare(bPart[i]); };
      arr.sort(sorter);
};
alphaNumericSort(arr);
console.log(arr);

出力

そして、コンソールの出力は-

になります
[
   '1', '2', 'A1',
   'A3', 'A3A', 'A3B',
   'A4', 'A10', 'A11',
   'A12', 'B2', 'B10',
   'F1', 'F3'
]

  1. JavaScriptで挿入ソートを実装する方法は?

    挿入ソート 配列をソートするのは非常に単純な比較ソートです。 比較ソート 並べ替えようとしている現在の値を配列内の他の値と比較します。一度に1つのアイテムを処理し、必要な並べ替えられた配列を取得するために、各アイテムを正しい場所に繰り返し配置します。 実際、挿入 ソートは、ヒープソートなどの一部の高度なアルゴリズムほど効率的ではありません。 またはマージソート 。大規模なプログラムを扱う場合、これは最良のオプションではありません。 隠れた定数値が低いため 、挿入ソートは、小さな配列を処理する際に、ヒープやクイックソートなどの高度なアルゴリズムの一部よりも優れています。 。 挿入ソート 配

  2. JavaScriptのArray.prototype.sort()。

    JavaScript Array.prototype.sort()メソッドは、配列の並べ替えに使用されます。並べ替えの順序は、アルファベット、数字、昇順、降順のいずれかです。 以下は、Array.prototype.sort()メソッドのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-