Array.prototype.sort()

(標準組み込みオブジェクト > Array > メソッド)
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

配列名.sort()

JavaScriptで並び替えを実現するメソッド。文字列順や数字の大小などによる昇順・降順で対象の値を並び替えることができるようになるため、データの操作などでよく使われる。
また、配列に格納されたバラバラの値やオブジェクトのキー(プロパティ)を対象にして並び替えることも可能なため、活用範囲はとても広いと言える。
ただし、sort()は元の配列データを変更してしまう破壊的メソッドでもある点には注意が必要である。
ソート順を定義する関数を指定しなかった場合、undefined 以外のすべての配列要素は文字列に変換され、文字列が UTF-16 コード単位順でソートされる。

let fruit = ['Orange', 'Apple', 'Grapes'];

console.log(fruit.sort());
// ["Apple", "Grapes", "Orange"]
console.log(fruit);
// ["Apple", "Grapes", "Orange"] 元の配列データも変更される

sort()メソッドの比較関数(コンパレータ関数)

配列名.sort( コールバック関数(一つ目の要素, 二つ目の要素) )

比較関数の目的は、別のソート順を定義すること。
比較関数は、引数に応じて、負、ゼロ、または正の値を返す必要がある。
sort()関数は 2 つの値を比較し、その値を比較関数に送信し、返された (負、ゼロ、正) 値に従って値を並べ替える。

  • 結果が-1(または負の値)の場合、aはbの前にソートされる。
  • 結果が1(または正の値)の場合、bはaの前にソートされる。
  • 結果が0(または等しい)の場合、2つの値の並べ替え順序は変更されない。
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
>> [1,5,10,25,40,100]

let arry =[
  {id:1,name:'morita'},
  {id:2,name:'kenji'},
  {id:4,name:'uro'},
  {id:3,name:'ken'}
];
arry.sort(function(a,b){
 return a.id > b.id
})
/*
[
  {id:1, name:'morita'},
  {id:2, name:'kenji'},
  {id:3, name:'ken'},
  {id:4, name:'uro'}
]
*/

// 大文字小文字区別なく順番通りに並び替える
let array = ['e','a','k','B','c'];
array.sort(function(a,b){
 return a.toUpperCase() > b.toUpperCase() ? 1 : -1 ;
});
>> ['a', 'B', 'c', 'e', 'k']

多次元配列のソート(単一キーのみ)

const lists = [ [ 1, 3 ], [ 1, 2 ], [ 2, 1 ], [ 1, 1 ] ];

// 1つ目を第1優先
function sortArray(arr){
  arr.sort((a,b) => {
    return a[0] - b[0]
  })
}
sortArray(lists);
// [
//  [ 1, 3 ], 
//  [ 1, 2 ], 
//  [ 1, 1 ], 
//  [ 2, 1 ] 
// ]

// 2つ目を第1優先
function sortArray(arr){
  arr.sort((a,b) => {
    return a[1] - b[1]
  })
}
sortArray(lists);

// 出力    
// [
//  [ 2, 1 ], 
//  [ 1, 1 ], 
//  [ 1, 2 ], 
//  [ 1, 3 ] 
// ]

多次元配列のソート(複数キー)

const lists = [ [ 1, 3 ], [ 1, 2 ], [ 2, 1 ], [ 1, 1 ] ];

// 1つ目を第一優先、2つ目を第二優先(いずれも昇順)
function sortArray(arr){
  arr.sort((a,b) => {
    if (a[0] < b[0]) return -1
	if (a[0] > b[0]) return 1
	if (a[1] < b[1]) return -1
	if (a[1] > b[1]) return 1
    return 0
  })
}
    
// 出力    
// [
//  [ 1, 1 ], 
//  [ 1, 2 ], 
//  [ 1, 3 ], 
//  [ 2, 1 ] 
// ]
inserted by FC2 system