Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript에서 혼합 숫자/영숫자 배열을 정렬하는 방법

<시간/>

다음과 같은 영숫자 문자열 배열이 있다고 가정합니다. -

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

하나의 배열에서 유일한 인수로 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'
]