I have a mixed array that I need to sort by alphabet and then by digit

[A1, A10, A11, A12, A2, A3, A4, B10, B2, F1, F12, F3]

我如何将其排序为:

[A1, A2, A3, A4, A10, A11, A12, B2, B10, F1, F3, F12]

我试过了

arr.sort(function(a,b) {return a - b});

but that only sorts it alphabetically. Can this be done with either straight JavaScript or jQuery?

推荐答案

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;
  }
}
console.log(
["A1", "A10", "A11", "A12", "A2", "A3", "A4", "B10", "B2", "F1", "F12", "F3"].sort(sortAlphaNum)
)

Jquery相关问答推荐

Flask,如何为ajax调用返回成功状态码

如何在 jquery 中包含 !important

在 jQuery 事件中控制this的值

jQuery 滚动到 Div

如何使用 jQuery 以编程方式触发对链接的点击?

jquery - 单击事件不适用于动态创建的按钮

当有多个具有相同 ID 值的元素时,jQuery 是如何工作的?

jQuery scrollTop 在 Chrome 中不工作但在 Firefox 中工作

在不使用提交按钮的情况下触发标准 HTML5 验证(表单)?

Bootstrap 3.0 弹出框和工具提示

数字键盘的keyCode值?

Jquery .show() 不显示隐藏可见性的 div

从父 node 中删除所有子 node ?

如何使用 requirejs 使 jQuery 插件可加载

虽然未定义变量 - 等待

使用 AJAX 加载 Bootstrap 弹出内容.这可能吗?

jQuery、复选框和 .is(":checked")

如何使用 jQuery 格式化电话号码

如何确定滚动高度?

只绑定一次事件