javascript - 如何修改虚线单元格名称的排序代码?

标签 javascript sorting

感谢this post,我使用了这段代码:

var reA = /[^a-zA-Z]/g;
var reN = /[^0-9]/g;

function sortAlphaNum(a, b) {
        var aA = a.replace(reA, "");
        var bA = b.replace(reA, "");
        if (aA === bA) {
            var aN = parseInt(a.replace(reN, ""), 10);
            var bN = parseInt(b.replace(reN, ""), 10);
            return aN === bN ? 0 : aN > bN ? 1 : -1;
        } else {
            return aA > bA ? 1 : -1;
        }
    }

但我尝试排序的有点复杂:

我有:

A1
A3
A5
A14
A6-1
A6-2

我预计:

A1
A3
A5
A6-1
A6-2
A14

最佳答案

您可以将其分为 3 个排序标准:1) 按第一个字符 2) 按第二个数字 3) 按可选的第三个数字(破折号 - 之后):

const arr = ['A5','A3','A1','A14','A6-2','A6-1'];

const sorted = arr.sort((a,b) => {

  const [[aChar, aN1, aN2],[bChar, bN1, bN2]] = [a,b].map(x => x.match(/([A-Z])|([0-9]+)/gi).map(el => Number(el) || el));

  const c1 = aChar.localeCompare(bChar);
  const c2 = aN1 - bN1;
  const c3 = (aN2 || 0) - (bN2 || 0);

  return c1 || c2 || c3;

});

console.log(sorted);

关于javascript - 如何修改虚线单元格名称的排序代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52060899/

相关文章:

javascript - Backbone.js 全局错误处理

python - 基于相似的组/索引合并多索引数据帧

arrays - 算法:如何对具有空间约束的矩阵元素进行排序

javascript - 获取重复项的数组索引

javascript - 在 Django 中的 AJAX POST 请求后重新加载模板

javascript - AngularJS 无法在 websocket 回调中使用作用域

javascript - 如何在循环中Promise?

javascript - 如何接收输入的数字并将其移动到数组中并按升序排序?

javascript - 对 Javascript 数组进行排序并获取数字差异

java - 通过选择进行排序