我正在使用Jim Palmer的自然类型(http://www.overset.com/2008/09/01/javascript-natural-sort-algorithm/),我有一个数组['1a','1b','1c',......]等等。我遇到的问题是它排序1d,1e,1f不正确。我发现每个字母数字比较返回1或-1,除了1d,1e,1f总是返回0,有没有人知道为什么会发生这种情况?
编辑: http://jsbin.com/peviteyifa/edit?html,js,console,output这里有一个例子,这是一个与jquery数据表相关的非常具体的问题
当我尝试排序时
columnDefs: [{targets: 0, type: 'natural'}]
答案 0 :(得分:0)
您的代码本身一定存在问题。 请分享代码以便更好地调查。
另外 如果要查看工作自然排序算法实现。
摘录:
for(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {
// find floats not starting with '0', string or 0 if not defined
oFxNcL = isNaN(xN[cLoc]) ? xN[cLoc] || 0 : parseFloat(xN[cLoc]) || 0;
oFyNcL = isNaN(yN[cLoc]) ? yN[cLoc] || 0 : parseFloat(yN[cLoc]) || 0;
// handle numeric vs string comparison - number < string
if (isNaN(oFxNcL) !== isNaN(oFyNcL)) { return (isNaN(oFxNcL)) ? 1 : -1; }
// rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'
else if (typeof oFxNcL !== typeof oFyNcL) {
oFxNcL += '';
oFyNcL += '';
}
if (oFxNcL < oFyNcL) return -1;
if (oFxNcL > oFyNcL) return 1;
}
如需进一步了解,请转到JSFiddle
答案 1 :(得分:0)
这个正则表达式似乎对d,e和f有一个特例:
re = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi
^^ ^