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

2024-04-27

我有一个混合数组,我需要按数字、字母表然后按数字排序-

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

我如何将其排序为:

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

这是我尝试过的:

var reA = /[^a-zA-Z]/g;
var reN = /[^0-9]/g;
function sortAlphaNum(a, b) {
    var AInt = parseInt(a.Field, 10);
    var BInt = parseInt(b.Field, 10);

    if (isNaN(AInt) && isNaN(BInt)) {
        var aA = (a.Field).replace(reA, "");
        var bA = (b.Field).replace(reA, "");
        if (aA === bA) {
            var aN = parseInt((a.Field).replace(reN, ""), 10);
            var bN = parseInt((b.Field).replace(reN, ""), 10);
            return aN === bN ? 0 : aN > bN ? 1 : -1;
        } else {
            return aA > bA ? 1 : -1;
        }
    } else if (isNaN(AInt)) {//A is not an Int
        return 1;//to make alphanumeric sort first return -1 here
    } else if (isNaN(BInt)) {//B is not an Int
        return -1;//to make alphanumeric sort first return 1 here
    } else {
        return AInt > BInt ? 1 : -1;
    }
}

fieldselecteddata.sort(sortAlphaNum);

但这仅按字母/数字顺序排序,直到 1 个数字和 1 个字符的组合,例如A1, A2, A10。但如果有像这样的值A3A, A3B在这种情况下,它不会正确排序。这可以直接使用 JavaScript 或 jQuery 来完成吗?


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

// regular expression to get the alphabetic and the number parts, if any
var regex = /^([a-z]*)(\d*)/i;

function sortFn(a, b) {
  var _a = a.match(regex);
  var _b = b.match(regex);

  // if the alphabetic part of a is less than that of b => -1
  if (_a[1] < _b[1]) return -1;
  // if the alphabetic part of a is greater than that of b => 1
  if (_a[1] > _b[1]) return 1;

  // if the alphabetic parts are equal, check the number parts
  var _n = parseInt(_a[2]) - parseInt(_b[2]);
  if(_n == 0) // if the number parts are equal start a recursive test on the rest
      return sortFn(a.substr(_a[0].length), b.substr(_b[0].length));
  // else, just sort using the numbers parts
  return _n;
}

console.log(arr.sort(sortFn));

Note: the i正则表达式中的修饰符 (/.../i) means 不区分大小写(查找小写和大写)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 如何使用 jQuery 将 html5 视频播放器静音

    我找到了如何使用 jquery 暂停和播放视频 video get 0 play video get 0 pause 但我找不到静音按钮 如果没有 jquery 解决方案 我只需一个 onclick js 解决方案即可 我需要尽快 还有有办
  • antd上传控件需要action函数,但我不需要它

    我正在使用 ant design 组件 并且有一个上传输入 https ant design components upload https ant design components upload 根据文档 需要对道具进行操作 但是 我不
  • Chrome 扩展 |有什么方法可以让 chrome.storage.local.get() 返回一些东西吗?

    在我的 chrome 扩展中 我需要使用 chrome 存储 在我的后台脚本中 我首先创建一个对象并将其添加到 chrome 存储中 然后我想从那里获取我的对象并返回 像这样的东西 var obj chrome storage local
  • 将键值对添加到数组中的所有对象

    我想向数组中的所有对象添加一个键 值参数 eg var arrOfObj name eve name john name jane 现在我想向所有对象添加一个新参数 isActive 以便生成的数组如下所示 eg name eve isAc
  • 有没有由 HTML + css + javascript 驱动的 sql 编辑器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 语法高亮 sql代码格式 代码镜像 http codemirror net 会成功的 这太好了 非常容
  • JavaScript 中最大长度的正则表达式

    如何限制与正则表达式匹配的字符串的长度 我假设var sixCharsRegEx 6 7 只匹配长度为 6 或 7 的字符串 but no http jsfiddle net FEXbB http jsfiddle net FEXbB 我缺
  • jQuery:评估 ajax 响应中的脚本

    来自我的 web 应用程序的 XML 响应既有要添加到页面的 HTML 也有要运行的脚本 我正在尝试从我的网络应用程序发回 XML 例如
  • 散景服务器获取鼠标位置

    我正在开发一个带有散景 0 12 2 的交互式应用程序 它根据特定的交互更新绘图 现在 我使用滑块来更改图中字形的位置 但实际上我想访问鼠标在特定图中的位置 数据集是一个多维矩阵 张量 密集数据 每个图在特定位置显示一个维度 如果我更改一个
  • 请解释JQuery中$({deg: 0})的含义

    有人可以向我解释一下这是什么意思吗 deg 0 in 使用 jquery animate 跨浏览器进行 CSS 旋转 https stackoverflow com questions 15191058 css rotation cross
  • 开始拖动另一个元素

    是否可以用另一个元素开始拖动 例如 http jsbin com igohod edit preview http jsbin com igohod edit preview 我想开始拖动 ct当我点击 icon 尤其 icon不是后裔 c
  • 对同一域发出 get 请求,出现 CORS 错误

    在浏览器扩展中 这是我的 ajax 调用 var xhr new XMLHttpRequest xhr open GET window location href true xhr responseType arraybuffer xhr
  • 使用“onclick”和 JavaScript 获取按钮上的 X/Y 坐标

    我是一名 JavaScript 初学者 正在寻找一种方法来获取单击按钮时的 x 和 y 坐标 这适用于 Opera IE9 和 Chrome 但我无法让它在 Firefox 中工作 到目前为止 这是我的代码 JavaScript 中的函数
  • 通过 javascript 将 onsubmit 添加到表单

    您将如何仅通过 Javascript 将 OnSubmit 属性插入到表单中 我对 javascript 还很陌生 所以如果您能够提供详细的示例代码 那将是最有帮助的 情况是这样的 我通过 Chargify 支付平台 使用托管注册页面来处理
  • Chrome 开发工具中 $() 和 $(this) 显示的 x.fn.x.init[] 值是多少

    我有在一些开发工具中调试 JS 和 jQuery 脚本的习惯 我意识到 Chrome 开发工具将 x fn x init 显示为 和 this 的值 但是我不知道这些价值是什么 Code
  • jQuery UI 和原型冲突

    我正在 Perl 中向我们的网站添加一个新表单 不是我的选择 表单会自动生成大量 html 以创建一致的外观 我的问题在于遗留系统在整个页面 包括加载时 中使用原型来处理各种事情 不过我想使用 jQuery 主要是 jQuery UI 中的
  • XHR 调用是宏任务还是微任务?

    Ajax 调用被安排为微任务还是宏任务 浏览器之间有什么区别吗 在 JavaScript Ninja 的秘密 第二版一书中 作者指出网络事件被安排为宏任务 因此 XHR 回调与宏任务一起排队
  • 如何在 vue.js 中使用 SVG.js 插件?

    我在用svg js在我的 Laravel 项目中运行vue js 这就是我使用的方式svg js Step 1 安装svg js作为我的 vue 应用程序中的插件 import svgJs from svg js dist svg expo
  • 用圆形雷达数学方法表示点

    我正在编写一个简单的应用程序 它可以向您显示您周围的朋友 但不是在法线地图中 而是在像 UI 这样的真正圆形雷达上 https i stack imgur com Au3IP png https i stack imgur com Au3I
  • .js.erb VS .js

    将 Rails 应用程序的 javascript 放入 js erb 文件而不只是将其放入 application js 文件有什么好处 我有一个企业创建按钮 因此我应该将代码放入 create js erb 文件中 还是使用以下方法将其放
  • vuejs2复制剪贴板问题

    我正在尝试使用https alligator io vuejs vue clipboard copy https alligator io vuejs vue clipboard copy 对于 Vue js 中的复制剪贴板功能 它对于字符

随机推荐