JavaScript
es2015

Javascriptで配列・オブジェクトの配列のソート

よく使うのでメモ。JavascriptのバージョンはES2015。

次のような配列やオブジェクトの配列(連想配列の配列)があった場合、

//普通の配列

var array = [5,3,7];

//オブジェクトの配列
var objArray = [
{'name':'apple','price':300},
{'name':'orange','price':200},
{'name':'banana','price':100}
];


1 配列のソート


関数

/**

* @function Array.prototype.sortArray 配列をソートする
*/

if(!Array.prototype.sortArray){
Object.defineProperty(Array.prototype, 'sortArray', {
configurable: false,
enumerable: false,
writable: false,
/**
* @string order ソートの順序 ('asc' or 'desc')
*/

value: function(order) {
switch(order){
case 'asc': //昇順
this.sort((a,b) => a-b);
break;
case 'desc': //降順
this.sort((a,b) => b-a);
break;
default: //昇順・降順の指定がない場合は降順でソート
this.sort((a,b) => b-a);
break;
}
return this;
}
});
}


処理→出力

var array = [5,3,7];

console.log(array.sortArray('desc')); //降順でソート


結果

[ 7, 5, 3 ]


2 オブジェクトの配列のソート


関数

キーから値を取得し、バリデーションを追加しただけで、基本的に配列のソートと同じ。

/**

* @function Array.prototype.sortObjArray オブジェクトの配列をソートする
*/

if(!Array.prototype.sortObjArray){
Object.defineProperty(Array.prototype, 'sortObjArray', {
configurable: false,
enumerable: false,
writable: false,
/**
* @string key ソートに用いるオブジェクトのキー
* @string order ソートの順序 ('asc' or 'desc')
*/

value: function(key,order) {
//オブジェクトの配列であるか確認
if(Object.prototype.toString.call(this[0])!=='[object Object]'){
console.log('TypeError: Other than an array of object was passed.');
return false;
}
switch(order){
case 'asc': //昇順
this.sort((a,b) => a[key]-b[key]);
break;
case 'desc': //降順
this.sort((a,b) => b[key]-a[key]);
break;
default: //昇順・降順の指定がない場合は降順でソート
this.sort((a,b) => b[key]-a[key]);
break;
}
return this;
}
});
}


処理→出力

var objArray = [

{'name':'apple','price':300},
{'name':'orange','price':200},
{'name':'banana','price':100}
];

console.log(objArray.sortObjArray('price','asc')); //昇順でソート


結果

[ { name: 'banana', price: 100 },

{ name: 'orange', price: 200 },
{ name: 'apple', price: 300 } ]