Javascript自然排序无法正常工作

时间:2017-03-24 16:45:41

标签: javascript sorting

我正在使用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'}]

2 个答案:

答案 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
                            ^^  ^