数値または文字列値が混在している可能性のある値の配列をソートしようとしています (例: [10,"20",null,"1","bar","-2",-3,null,5,"foo"]
)。この配列を次のように並べ替えるにはどうすればよいですか
null
値は常に最後に配置されます (ソート順に関係なく、jsFiddle を参照してください)。- 負の数は正しくソートされます (つまり、それらは正の数よりも小さく、それらの間で正しくソートされます)
? 詳細な数値と文字列の例 (およびオプションを使用) を使用してjsFiddleを作成しましたが、出発点として以下に並べ替えアルゴリズムの数値バージョンを貼り付けます。localeCompare
numeric
// Sorting order
var order = "asc"; // Try switching between "asc" and "dsc"
// Dummy arrays
var numericArr = [10,20,null,1,-2,-3,null,5];
// Sort arrays
$(".output1").append(numericArr.toString());
numericArr.sort(sortByDataNumeric);
$(".output2").append(numericArr.toString());
// Numeric sorting function
function sortByDataNumeric(a, b, _order) {
// Replace internal parameters if not used
if (_order == null) _order = order;
// If values are null, place them at the end
var dflt = (_order == "asc" ? Number.MAX_VALUE : -Number.MAX_VALUE);
// Numeric values
var aVal = (a == null ? dflt : a);
var bVal = (b == null ? dflt : b);
return _order == "asc" ? (aVal - bVal) : (bVal - aVal);
}
私の文字列ソート アルゴリズム ( jsFiddleを参照) の問題は、値を常に最後に配置する方法を見つけることができずnull
、負の値がそれ自体で正しくソートされないことです (たとえば、-3 は -2 よりも小さい必要があります)。
編集
コメントに答えるために、私は[10,"20",null,"1","bar","-2",-3,null,5,"foo"]
ソートすることを期待しています[-3,"-2","1",5,10,"20","bar","foo",null,null]