sort メソッド
文字列や数字の昇順・降順で対象の値を並び替えることができる破壊的メソッドです。
const fruits = ["banana", "orange", "apple"];
console.log(fruits.sort());
console.log(fruits);
// 結果
[ 'apple', 'banana', 'orange' ]
[ 'apple', 'banana', 'orange' ]
文字列や数字の昇順・降順で対象の値を並び替えることができる破壊的メソッドです。
const fruits = ["banana", "orange", "apple"];
console.log(fruits.sort());
console.log(fruits);
// 結果
[ 'apple', 'banana', 'orange' ]
[ 'apple', 'banana', 'orange' ]
let array = [
"a",
"あ",
"sss",
"か",
"テスト"
];
console.log(array.sort());
for(let i = 0; i < array.length; i++){
for(let j = 0; j < array[i].length; j++){
// 配列arrayのそれぞれの文字のUnicodeコードポイントを表示
console.log(array[i][j] + ":" + array[i].codePointAt(j))
}
}
// 結果
a:97
s:115
s:115
s:115
あ:12354
か:12363
テ:12486
ス:12473
ト:12488
以下のようにしても、オブジェクトの場合は並び替えが行われません。b.str と a.str は文字列なので、減算演算子( - )を使うと NaN(Not a Number) になります。
let array = [
{ str: "apple" },
{ str: "ぶどう" },
{ str: "orange" },
{ str: "バナナ" },
{ str: "すいか" },
];
array.sort(function(a, b){ return b.str - a.str});
console.log(array);
// 結果
[
{ str: 'apple' },
{ str: 'ぶどう' },
{ str: 'orange' },
{ str: 'バナナ' },
{ str: 'すいか' }
]
以下のコードの実行結果は、NaNになります。
let array = [
{ str: "apple" },
{ str: "ぶどう" },
{ str: "orange" },
{ str: "バナナ" },
{ str: "すいか" },
];
console.log(array[0]["str"] - array[1]["str"]);
// 結果
NaN
オブジェクトの値が数値の場合は、減算演算子を使ってもソートできます。
let array = [
{ number: 26 },
{ number: 1 },
{ number: 120 },
{ number: 80 },
{ number: 50 },
];
// 昇順
console.log(array.sort(function(a, b){ return a.number - b.number}));
// 降順
console.log(array.sort(function(a, b){ return b.number - a.number}));
// ---------------------------------------------------------------
// 以下の場合もソート可能でした
let array = [
{ number: "26" },
{ number: "1" },
{ number: "120" },
{ number: 80 },
{ number: 50 },
];
// 昇順
console.log(array.sort(function(a, b){ return a.number - b.number}));
// 降順
console.log(array.sort(function(a, b){ return b.number - a.number}));
オブジェクトの値が文字列の場合にソートするには、以下のようにします。
let array = [
{ str: "apple" },
{ str: "ぶどう" },
{ str: "orange" },
{ str: "バナナ" },
{ str: "すいか" },
];
// 昇順
console.log(array.sort((a, b) => { return (a.str < b.str) ? -1 : 1 }));
// 降順
console.log(array.sort((a, b) => { return (a.str > b.str) ? -1 : 1 }));
let num = [];
let min = 0;
let max = 29;
while(true){
if(num.length == max + 1){
break;
}
let r = Math.floor( Math.random() * (max + 1 - min) ) + min;
if(num.includes(r) == false){
num.push(r);
}
}
function ascFunc(a, b) {
return a - b;
}
function desFunc(a, b) {
return b - a;
}
上記の配列 num を sort メソッドを使って並び替えると以下のようになります。
console.log(num.sort());
// 実行結果
[
0, 1, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 2, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 3, 4, 5, 6,
7, 8, 9
]
上記のようになる理由は、sortメソッドは、比較関数を指定しない場合、要素を文字列としてソートするためです。各要素を文字列に変換して、辞書順に並べます。
"10" の先頭の "1" は "2" より小さいため、"10" は "2" より前に来ます。
この結果、「1から始まる数値」→「2から始まる数値」→「3から始まる数値」… という順序になります。
数値の値どおありに昇順・降順に並べ替えるには以下のようにします。
console.log(num.sort(ascFunc));
console.log(num.sort(desFunc));