JavaScriptのソート配列
配列の並べ替え
このsort()
メソッドは、配列をアルファベット順にソートします。
例
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
配列を反転する
このreverse()
メソッドは、配列内の要素を反転します。
これを使用して、配列を降順で並べ替えることができます。
例
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
fruits.reverse();
数値ソート
デフォルトでは、関数は値を文字列sort()
としてソートします。
これは文字列に適しています(「Apple」は「Banana」の前にあります)。
ただし、数値を文字列として並べ替える場合、「2」は「1」よりも大きいため、「25」は「100」よりも大きくなります。
このため、このsort()
メソッドは数値を並べ替えるときに誤った結果を生成します。
比較機能を提供することでこれを修正できます:
例
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
同じトリックを使用して、配列を降順で並べ替えます。
例
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
比較機能
比較関数の目的は、代替のソート順を定義することです。
比較関数は、引数に応じて、負、ゼロ、または正の値を返す必要があります。
function(a, b){return a - b}
このsort()
関数は2つの値を比較するときに、その値をcompare関数に送信し、返された(負、ゼロ、正)値に従って値を並べ替えます。
結果が負の場合は、のa
前にソートされ
b
ます。
結果が正の場合、のb
前にソートされa
ます。
結果が0の場合、2つの値のソート順は変更されません。
例:
比較関数は、配列内のすべての値を一度に2つの値で比較します(a, b)
。
40と100を比較する場合、sort()
メソッドはcompare関数(40、100)を呼び出します。
この関数は40〜100を計算(a - b)
し、結果が負(-60)であるため、並べ替え関数は40を100未満の値として並べ替えます。
このコードスニペットを使用して、数値およびアルファベット順の並べ替えを試すことができます。
<button onclick="myFunction1()">Sort Alphabetically</button>
<button
onclick="myFunction2()">Sort Numerically</button>
<p id="demo"></p>
<script>
const points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = points;
function
myFunction1() {
points.sort();
document.getElementById("demo").innerHTML
= points;
}
function myFunction2() {
points.sort(function(a, b){return
a - b});
document.getElementById("demo").innerHTML = points;
}
</script>
配列をランダムな順序で並べ替える
例
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return 0.5 - Math.random()});
フィッシャーイェーツ法
上記の例、array .sort()は正確ではなく、他の数値よりもいくつかの数値を優先します。
最も人気のある正しい方法は、フィッシャーイェーツシャッフルと呼ばれ、早くも1938年にデータサイエンスに導入されました。
JavaScriptでは、メソッドは次のように変換できます。
例
const points = [40, 100, 1, 5, 25, 10];
for (let i = points.length -1; i > 0;
i--) {
let j = Math.floor(Math.random() * i)
let k = points[i]
points[i] = points[j]
points[j] = k
}
最高(または最低)の配列値を見つける
配列内の最大値または最小値を見つけるための組み込み関数はありません。
ただし、配列を並べ替えた後は、インデックスを使用して最大値と最小値を取得できます。
昇順で並べ替え:
例
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
// now points[0] contains the lowest value
// and points[points.length-1] contains the highest value
降順で並べ替え:
例
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
// now points[0] contains the highest value
// and points[points.length-1] contains the lowest value
最高(または最低)の値だけを見つけたい場合は、配列全体を並べ替えるのは非常に非効率的な方法です。
配列でのMath.max()の使用
Math.max.apply
配列内の最大数を見つけるために使用できます。
例
function myArrayMax(arr) {
return Math.max.apply(null, arr);
}
Math.max.apply(null, [1, 2, 3])
と同等Math.max(1, 2, 3)
です。
配列でのMath.min()の使用
Math.min.apply
配列内の最小数を見つけるために使用できます。
例
function myArrayMin(arr) {
return Math.min.apply(null, arr);
}
Math.min.apply(null, [1, 2, 3])
と同等Math.min(1, 2, 3)
です。
私の最小/最大JavaScriptメソッド
最速の解決策は、「自家製」の方法を使用することです。
この関数は、各値を見つかった最大値と比較する配列をループします。
例(最大値を検索)
function myArrayMax(arr) {
let len = arr.length;
let max = -Infinity;
while (len--) {
if (arr[len] > max) {
max = arr[len];
}
}
return max;
}
この関数は、配列をループして、各値を見つかった最小値と比較します。
例(最小値の検索)
function myArrayMin(arr) {
let len = arr.length;
let min = Infinity;
while (len--) {
if (arr[len] < min) {
min = arr[len];
}
}
return min;
}
オブジェクト配列の並べ替え
JavaScript配列には、多くの場合、オブジェクトが含まれています。
例
const cars = [
{type:"Volvo", year:2016},
{type:"Saab", year:2001},
{type:"BMW", year:2010}
];
オブジェクトに異なるデータ型のプロパティがある場合でも、このsort()
メソッドを使用して配列を並べ替えることができます。
解決策は、プロパティ値を比較するための比較関数を作成することです。
例
cars.sort(function(a, b){return a.year - b.year});
文字列のプロパティの比較はもう少し複雑です。
例
cars.sort(function(a, b){
let x = a.type.toLowerCase();
let y = b.type.toLowerCase();
if (x < y) {return -1;}
if (x > y) {return 1;}
return 0;
});
完全なアレイリファレンス
完全な配列リファレンスについては、以下にアクセスしてください。
このリファレンスには、すべての配列プロパティとメソッドの説明と例が含まれています。