Javascript Json配列をソートする例
メモ。sortの引数に関数を指定するというのが、よく意味がわからないがちゃんとソートしてくれる。
function compare( a, b ){
var r = 0;
if( a.age < b.age ){ r = -1; }
else if( a.age > b.age ){ r = 1; }
return ( -1 * r );
//return r;
}
var myArray = [
{ id: 1, name: "鈴木", age: 30 },
{ id: 2, name: "田中", age: 29 },
{ id: 3, name: "佐藤", age: 5 },
{ id: 4, name: "佐藤", age: 35 },
{ id: 5, name: "鈴木", age: 40 }
];
console.log("" + JSON.stringify(myArray.sort( compare )));
Contents
JSON配列をクイックソートする
//クイックソート関数
function quickSort(arr, start, end, key, order){
var pivot = arr[Math.floor((start + end) / 2)];
var left = start;
var right = end;
while(true){
if(order === 'desc'){
while(arr[left][key] > pivot[key]){
left++;
}
while(pivot[key] > arr[right][key]){
right--;
}
}else if(order === 'asc'){
while(arr[left][key] < pivot[key]){
left++;
}
while(pivot[key] < arr[right][key]){
right--;
}
}
//leftとrightの値がぶつかったら、そこでグループ分けの処理を止める。
if(right <= left){
break;
}
//rightとrightの値がぶつかっていない場合、leftとrightを交換
//交換後にleftを後ろへ、rightを前へ一つ移動する
var tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
//左側に分割できるデータがある場合、quickSort関数を呼び出して再帰的に処理を繰り返す。
if(start < left - 1){
quickSort(arr, start, left - 1, key, order);
}
//右側に分割できるデータがある場合、quickSort関数を呼び出して再帰的に処理を繰り返す。
if(right + 1 < end){
quickSort(arr, right + 1, end, key, order);
}
}
var myArray = [
{ name: "AAA", age: 30 },
{ name: "BBB", age: 29 },
{ name: "CCC", age: 50 },
{ name: "DDD", age: 70 },
{ name: "EEE", age: 80 },
{ name: "FFF", age: 20 },
{ name: "GGG", age: 50 },
{ name: "HHH", age: 40 }
];
quickSort(myArray, 0, myArray.length - 1, "age", "desc");
//結果の表示
console.log(myArray);