2017-03-24 5 views
0

私はJim Palmerの自然な並べ替え(http://www.overset.com/2008/09/01/javascript-natural-sort-algorithm/)を使用していて、配列['1a'、 '1b'、 '1c'、...]などがあります。 1d、1e、1fを誤ってソートします。私はすべての英数字の比較が常に1を返す1d、1e、1fを除いて1または-1を返すことを発見しました。なぜ誰がこのことが起こり得るのか知っていますか?Javascriptの自然な並べ替えが正しく動作しない

編集:ここ http://jsbin.com/peviteyifa/edit?html,js,console,outputが、これは私はあなたのコード自体にいくつかの問題が存在しなければならない columnDefs: [{targets: 0, type: 'natural'}]

+3

あなたは投稿できますこれを示すコードサンプル? – Halcyon

+0

ありがとう@Halcyon – Char

+1

そのコードは少し怖いです。私はナチュラルソートをやっているだけではなく、日付別にソートしようとします。この行: '/(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+ $ | [0-9] +)/ gi、 'は' df'と 'e'のために何らかの例外を含んでいるようです。これが見つかった場合:https://github.com/Bill4Time/javascript-natural-sort/blob/master/naturalSort.jsあなたが投稿したバージョンのように見えますが、それは新しいものであり、バグを含んでいない可能性があります。 – Halcyon

答えて

0

に行く:

re = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi 
          ^^^
0

並べ替えしようとしたとき、私はjQueryのDataTableのに

に関連した午前かなり具体的な問題となっている例です。 より良い調査のためにコードを共有してください。

また 作業自然分類アルゴリズムの実装をチェックしたい場合は、

抜粋:さらに理解するために

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; 
} 

この正規表現をd、e、fのための特別なケースを持っているように見えるこのJSFiddle

関連する問題