用点、字母、数字对对象数组进行排序。我能够按数字排序,但混合值很困难。不确定是否可以做对

2023-11-25

我尝试了典型的排序功能并检查项目是否为字符串。但我得到了一个非常奇怪的输出。尝试了多种不同的方法。

 var arr = [{section: '12.2.a'},
               {section: '12.2.b.iii'},
               {section: '12.2.c'},
               {section: '12'},
               {section: '12A'},
               {section: '12.3.b'},
               {section: '12.3.c'},
               {section: 'Q2'},
               {section: 'Q32'},
               {section: 'Q6'},
               {section: 'Q5'}]



var arr2 = arr.sort(function(a, b) {
    var nums1 = a.section.split(".");
    var nums2 = b.section.split(".");

    for (var i = 0; i < nums1.length; i++) {
      if (nums2[i]) {
        if (nums1[i] !== nums2[i]) {
          if (isNaN(parseInt(nums1[i])) && isNaN(parseInt(nums2[i]))) {
            return nums1[i].localeCompare(nums2[i]);
          }
          return parseInt(nums1[i]) - parseInt(nums2[i]);   
        }
      } else {
        return 1;
      }
    }
    return -1;
});

我应该使用 localeCompare 还是可以不使用? 希望输出为:

[
 {section: '12'},
 {section: '12A'},
 {section: '12.2.a'},
 {section: '12.2.b.iii'},
 {section: '12.2.c'},
 {section: '12.3.b'},
 {section: '12.3.c'},
 {section: 'Q2'},
 {section: 'Q6'},
 {section: 'Q5'}
 {section: 'Q32'}]

非常感谢任何建议


我提出了一种完全不同的方法。我们将修改您的字符串,直到它们可以排序localeCompare

就是这样:

// "12" sorts before "2", prefixing to "12" and "02" fixes this
// (length should be bigger than your largest nr)
var makeLength5 = prefixWithZero.bind(null, 5);

// This function generates a string that is sortable by localeCompare
var toSortableString = function(obj) {
  return obj.section
    .replace(/\./g, "z")            // Places `12A` before `12.` but after `12`
    .replace(/\d+/g, makeLength5);  // Makes every number the same length
};

var arr = [{section:"12.2.a"},{section:"12.2.b.iii"},{section:"12.2.c"},{section:"12"},{section:"12A"},{section:"12.3.b"},{section:"12.3.c"},{section:"Q2"},{section:"Q32"},{section:"Q6"},{section:"Q5"}];
var arr2 = arr.sort(function(a, b) {
  return toSortableString(a).localeCompare(toSortableString(b));
});

console.log(JSON.stringify(arr2.map(function(s){ return s.section; }), null, 2));

// Helper methods
function prefixWithZero(length, str) {
  while (str.length < length) {
    str = "0" + str;
  }
  return str;
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用点、字母、数字对对象数组进行排序。我能够按数字排序,但混合值很困难。不确定是否可以做对 的相关文章

  • 删除所有标记谷歌地图v3

    在我的第一次点击事件中 所有标记都显示在谷歌地图中 我想在第二次点击中删除它们 当我执行代码时 仅删除最后一个标记 这是我的 JavaScript 代码 var showmarkers false google maps event add
  • 在原始文件之后插入克隆文件

    我试图在原始元素之后放置一个克隆元素 我做了一些研究 发现了如何创建克隆以及如何将克隆放置在原始副本之后 但我似乎无法将它们放在一起 这是我的代码
  • 如何从字符串调用并执行运算符?

    例如 var s 3 3 s replace d g function all n1 operator n2 r new Number n1 new Number n2 return r 注意 不使用eval 变量运算符可以吗 https
  • 查找数组中的重叠数据

    我们正在编写一个 C 应用程序 它将有助于删除不必要的数据重复器 只有在以下情况下才可以移除中继器 all它接收到的数据被其他中继器接收 我们第一步需要做的事情解释如下 例如 我有 int 数组的集合 A 1 2 3 4 5 b 2 4 6
  • React Native Tab 视图的高度始终等于最高选项卡的高度

    介绍 我有一个 FlatList 它在页脚中呈现一个选项卡视图 此选项卡视图允许用户在一个 FlatList 或另一个 FlatList 之间切换 所以 最后这些是同级 FlatList Problem 第一个 FlatList A 的高度
  • 在TestCafé测试中注入的injectScripts中的脚本在哪里?

    我正在以编程方式设置 TestCaf 测试 并且使用injectScripts配置上Runner类来注入函数 根据文档 这些脚本被添加到测试页面的标题中 是否可以从测试本身调用函数 我还没有找到办法做到这一点 我可以看到脚本映射在测试中是可
  • 按共同关联的数量排序 (Rails)

    背景 我有帖子和用户 并且都有很多社区 客观的 对于任何给定的用户 我想返回一个帖子集合 按该帖子与该用户有共同社区的数量排序 具有更多共同社区的帖子位于更高的位置 我当前的尝试 使用排序方法 有效 Post includes commun
  • 无法解构“undefined”或“null”的属性“user”

    使用 redux 检索用户信息时出错 我想从数据库获取用户信息 姓名 密码和头像地址 然后对其进行编辑 我正在使用nodejs express react redux 和jwt Actions user js import axios fr
  • Sonarqube 未从 LCOV 检索我的 JavaScript 覆盖范围

    我有一个具有以下结构的应用程序 my application pom xml app scripts app js js 3rd party libs build node modules test 我已经创建了pom xml仅运行 Son
  • 如何在javascript中解压二进制文件?

    我正在尝试将一些现有代码从 python 移植到 javascript 并且不确定如何处理以下行 var1 var2 struct unpack
  • Material UI Drawer设置背景色

    如何简单设置Material UI的背景色Drawer 尝试过这个 但不起作用
  • React this.setState 不是一个函数

    尝试编写使用第 3 方 API 的应用程序时不断收到此错误 类型错误 this setState 不是一个函数 当我尝试处理 API 响应时 我怀疑这个绑定有问题 但我不知道如何修复它 这是我的组件的代码 var AppMain React
  • preg_match_all JS 等效吗?

    Javascript 中是否有与 PHP 的 preg match all 等效的函数 如果没有 将正则表达式的所有匹配项放入数组的最佳方法是什么 我愿意使用任何 JS 库来让它变得更容易 您可以使用match使用全局修饰符 gt gt g
  • 如何使用 JQuery 提取嵌套 HTML 中的文本?

    我这里有 HTML 代码 div class actResult style border solid table tbody tr td Order Number td td 1 td tr tr td Customer Number t
  • 允许调用函数覆盖默认选项 - jQuery UI 对话框

    我希望 CallingFunction 能够覆盖中提供的默认选项showDivPopUp功能 function calling showDivPopUp title of pop up box message to show buttons
  • 意外标记:使用映射形成对象数组[重复]

    这个问题在这里已经有答案了 我想制作这个 name james age 10 name john age 12 name johnny age 56 我的下面的代码失败了 得到了预期的令牌吗 let x name james age 10
  • 如何将函数绑定到DOM事件一次且仅一次,以便在事件触发时不会再次执行?

    所以我有以下形式的锚标签 a href link 我在页面加载时应用以下内容 我的意思是 文档准备就绪 jQuery a rel Tab click function e e preventDefault then I do some st
  • 使用 JavaScript 更改网址栏中的域名

    有没有办法使用window history pushState或者任何其他js函数来更改地址栏中的整个url 我无法删除根部分 上下文 我的应用程序位于 Heroku 上 网址如下所示http mywebsite herokuapp com
  • 如何在 Javascript 中检测网络丢失?

    我的 Web 应用程序适用于多种手持设备 例如 iPad Galaxy 选项卡等 应用程序从服务器请求图像并在客户端上呈现 现在的问题有时会发生 在图像渲染过程中网络连接会丢失 而不是在设备上显示 html 无图像图标时 我想优雅地处理这种
  • 从 Bigcommerce 的浏览器内存中删除注入的分析库?

    我们如何删除这个脚本注入器系统并清除内存中的函数 简报 最近 Bigcommerce 的不法分子以 监控 为幌子创建了一个分析注入器 JS 该注入器被锁定在全局变量中 他们在未经任何 OP 同意的情况下将其推广到所有 50 000 家前台商

随机推荐