我正在尝试对从文档中提取的一些段落编号进行排序。
不幸的是,它们不是真正的小数,因此标准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/