如何在JavaScript中对混合的数字/字母数字数组进行排序

假设我们有一个这样的字母数字字符串数组-

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

我们需要编写一个JavaScript函数,该函数必须在一个数组中(例如1和唯一的参数)。

并且该函数应在原位置对该数组排序-

  • 仅包含数字的字符串应首先以升序排序。

  • 包含字母和数字的组合的字符串应首先根据字母排序,然后再按数字升序排序。

因此,输出应类似于-

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'

]

以上是 如何在JavaScript中对混合的数字/字母数字数组进行排序 的全部内容, 来源链接: utcz.com/z/347124.html

回到顶部