Computer >> Máy Tính >  >> Lập trình >> Javascript

Cách sắp xếp mảng hỗn hợp số / chữ và số trong JavaScript

Giả sử chúng ta có một mảng các chuỗi chữ và số như thế này -

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

Chúng tôi được yêu cầu viết một hàm JavaScript trong một mảng như một và là đối số duy nhất.

Và hàm sẽ sắp xếp mảng này ở vị trí -

  • Các chuỗi chỉ chứa số phải được sắp xếp đầu tiên theo thứ tự tăng dần.
  • Các chuỗi chứa sự kết hợp giữa bảng chữ cái và số phải được sắp xếp trước tiên theo bảng chữ cái và sau đó theo số theo thứ tự tăng dần.

Do đó, đầu ra sẽ giống như -

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

Ví dụ

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);

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

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