2

名前をアルファベット順に並べ替えるコードがあります。
私が抱えている問題は、小数の処理方法にあります。
以下のように名前を並べます(数値的に増やしたいと思います):

DOG - 1.0510
DOG - 1.1031
DOG - 11.1792
DOG - 12.0920
DOG - 12.1170
DOG - 2.0186 <-- should be after "DOG - 12.117" ???
DOG - 21.4070
DOG - 22.0790
DOG - 23.0390
CAT - 1.0810
CAT - 1.1071
CAT - 11.1592
CAT - 12.0691
CAT - 12.1718
CAT - 2.0186 <-- again should be after "CAT -12.1718" ???
CAT - 21.1403
CAT - 22.081
CAT - 23.069

以下のようなオブジェクトの配列内に名前/値があります。

var array = [
   {
      "myname":"DOG",
      "value":1.0051
   },
   {
      "myname":"DOG",
      "value":1.1071
   }
];

これは、オンラインで見つけたスニペットから使用しているコードです。

function(x, y){
             var xName=x.myname.toLowerCase(), yName=y.myname.toLowerCase()
             if (xName < yName) //string sort ascending
              return -1 
             if (xName < yName)
              return 1
             return 0 //return default value (without sorting)
        }
4

2 に答える 2

2

問題は、値でもソートする必要があるが、名前だけでソートしていることだと考えてください。
以下はそれを修正する必要があります。アルファベット順に並べ替え、次に数値順に並べ替えます。

コード:

function(x, y) {
    var parts = {
        x: x.myname.split(' - '),
        y: y.myname.split(' - ')
    };
    if (parts.x[0] == parts.y[0]) // strings are the same
        return parseFloat(parts.x[1]) - parseFloat(parts.y[1]); // sort by number
    return parts.x[0] > parts.y[0] ? 1 : -1; // sort by string
}
于 2013-02-04T09:21:18.597 に答える