javascript - Nodejs : sorting paragraph numbers

标签 javascript node.js sorting

我正在尝试对从文档中提取的一些段落编号进行排序。

不幸的是,它们不是真正的小数,因此标准sort函数不起作用。例如,我想要以下结果: ["3.1","3.2","3.11"] NOT ["3.1","3.11","3.2"] (这是我从使用中得到的: http://www.w3schools.com/jsref/jsref_sort.asp )。

这些数字也有不确定的小数位数。例如,它们可以显示如下:["1.i.a","1.i.b","1.i.c.A","1.i.c.B"]

在解决这个问题一段时间后,我相信最好的解决方案是将每个数字视为用“.”分隔的子字符串,并根据“最低”子字符串对它们进行比较/排序。

有人可以建议如何在 JS 中完成此操作吗?

非常感谢任何帮助

最佳答案

这对你有用吗?如果需要的话我可以提供更多解释。

"use strict"
let index = ['3.1.a', '3.2', '3.11', '3.1.c', '3.2.z'];

index.sort((a, b) => {
  var aArr = a.split('.'), bArr = b.split('.')

  for (var i = 0, aLength = aArr.length; i < aLength; i++) {
    let aVal = aArr[i], bVal = bArr[i]
    if (!isNaN(aVal)) aVal = Number(aVal) // convert substring into Number if it is a Number
    if (!isNaN(bVal)) bVal = Number(bVal)

    if (bVal === undefined) return 1 // b lower index
    if (aVal === bVal) continue

    return typeof(aVal) === "string" ? aVal.charCodeAt() - bVal.charCodeAt() : aVal - bVal; // for strings, works only if length == 1
  }

  return bArr[i] === undefined ? 0 : -1 // if b undefined, then both numbers are equal, otherwise a is shorter
})

console.log(index)
// outputs [ '3.1.a', '3.1.c', '3.2', '3.2.z', '3.11' ]

关于javascript - Nodejs : sorting paragraph numbers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38640525/

相关文章:

javascript - 编译后的 typescript 和 vanilla javascript 之间的内存使用情况不同

java - 按数值对 ArrayList<String> 进行排序

java - MapReduce(二级)排序/过滤 - 如何?

javascript - Microsoft Edge array.sort(compareFunction) 排序不正确

javascript - 将 Vue.js 与 Typescript 一起使用时如何使用 vue-resource 等插件?

javascript - 如何使 Twitter Bootstrap 工具提示易于访问?

javascript - 如何将 React 库提取到单独的包中?

javascript - 延迟 iFrame 加载其 src 直到调用函数?

javascript - 如何导出node.js中请求生成的变量

javascript - 为什么你可以重新定义 globalThis 和 global 而不是 window?