nodeサーバーにてjsonファイルの並べ替えを行った後にクライアントにデータを送信しています。以下は2つともサーバー側の記述です。
javascript
1 function object_array_sort(data,key,order,fn){ 2 var num_a = -1; 3 var num_b = 1; 4 5 if(order === 'asc'){ 6 num_a = 1; 7 num_b = -1; 8 } 9 data = data.sort(function(a, b){ 10 var x = parseFloat(a[key]); 11 var y = parseFloat(b[key]); 12 if (x > y) return num_a; 13 if (x < y) return num_b; 14 return 0; 15 }); 16 fn(data); // ソート後の配列を返す 17 }
javascript
1//記録でソート 2 var matubi = name.slice( -1 ) ; 3 if(matubi == "ア"){ 4 var ii= 'asc'; 5 }else{ 6 var ii= 'desc'; 7 } 8 if(name.slice( -3 ) == "アイウ"){ 9 var iii= 'r9'; 10 }else{ 11 var iii= 'r0'; 12 } 13 14 15 object_array_sort(items, iii, ii, function(new_data){ 16 17 for (i in new_data) { 18 item = new_data[i]; 19 ID = item.id; 20 //↓以下抽出等の記述が続きクライアントにデータを送信
要するに条件を付けて並べ替えを行い、それによってデータをクライアントに送っているわけですが、json項目r0には小数を含む数値が入っています。要するに記録です。その中には「失格」「失格13.05」(参考記録的な)なども含まれており、これらを順番付けする際に困っています。
結果:
1位 11.5
2位 失格
3位 12.55
・
・
7位 失格13.05
等となってしまうのです。
1つ目の関数object_array_sortにて、parseFloat()で数値として読み取っていたつもりなのですが何がおかしいのでしょうか。
正しくは
希望:
1位 11.5
2位 12.55
・
・
・
・
40位 失格13.05
41位 失格
のような形で(40と41位は順序は特にこだわらない)並べ替えをしたいと思っています。
どなたかご教示ください。