JavaScript ソート多次元配列
ソートとは、アイテムを昇順または降順に並べ替える方法です。 要素のソートは、別のアイテムまたは要素と比較して行われます。
JavaScript で 1 次元配列を並べ替える
これを実証するために、1 次元配列を [2,78,4,10,3,59,6]
としてソートを実行することを考えてみましょう。
コード:
// single-dimensional array
const array = [2, 78, 4, 10, 3, 59, 6];
// sorting in increasing order
const in_array = array.sort((a, b) => {
return a - b;
})
console.log(in_array);
// sorting in decreasing order
const de_array = array.sort((a, b) => {
return b - a;
})
console.log(de_array);
並べ替え後の期待される出力は次のとおりです。
ここでは、要素は昇順で並べ替えられます。つまり、要素は昇順で並べられます。 配列の要素も降順でソートされます。つまり、要素は降順で配置されます。
JavaScript で アロー関数 を使用して、この並べ替えを実行します。
注: Arrow 関数は、JavaScript の ES6 バージョンで導入された関数の 1つです。 通常の関数よりもきれいに関数を作成できます。
たとえば、これが元の関数の場合:
let testFunction = function(a, b) {
return a * b;
}
この関数は、アロー関数を使用して次のように簡単な形式で記述できます。
let testFunction = (a, b) => a * b;
JavaScript での多次元配列または N 次元配列の並べ替え
多次元配列は、JavaScript の配列 sort()
メソッドを使用してソートできます。 ここでは、多次元配列が列のインデックス番号に基づいて並べ替えられます。
多次元配列を [[0,1,2,0,0], [3,0,0,2,0], [2,0,0,4,6], [0,3,4,0,5], [0,0,3,5,0]]
.
コード:
// multidimensional array
const multidimensional_array = [
[0, 1, 2, 0, 0], [3, 0, 0, 2, 0], [2, 0, 0, 4, 6], [0, 3, 4, 0, 5],
[0, 0, 3, 5, 0]
];
// sorting multidimensional array
multidimensional_array.sort((a, b) => {
// performing sorting based on 2nd, and 3rd columns of the matrix
return a[2] - b[2];
})
console.log(multidimensional_array);
ソート後に受け取る出力は次のとおりです。
必要に応じて、多次元配列をソートするためのさまざまな方法または手法を適用できます。
次の配列の配列があるとしましょう。
const array = [['M', 'B', 'M', 'Z', 'B', 'B'], ['B', 'M', 'M', 'B', 'B', 'Z']];
このタイプの配列を 1つ受け入れる JavaScript 関数を作成する必要があります。 関数は、以下の規則を使用して、提供された各配列の部分配列を内部的にソートする必要があります。
- 要素が
M
でもB
でもない場合、それらはその位置にとどまるべきです。 - 要素が
M
またはB
の場合は、アルファベット順に並べ替える必要があります。
その結果、上記の配列の最終出力は次のようになります。
const output = [['M', 'M', 'M', 'Z', 'M', 'B'], ['B', 'B', 'B', 'B', 'B', 'Z']];
ソートアルゴリズムで必要な場合、部分配列の要素が配列を変更する可能性があることに注意してください。
コード:
const array = [['M', 'B', 'M', 'Z', 'B', 'B'], ['B', 'M', 'M', 'B', 'B', 'Z']];
const custom_sort = (array = []) => {
const order = [].concat(...array.slice()),
result = []; order.forEach((element, index) => {
if (element === 'M') {
const bIndex = order.indexOf('B');
if (bIndex < index){
order[bIndex] = 'M'; order[index] = 'B';
};
};
})
array.forEach(element => result.push(order.splice(0, element.length)))
return result;
}
console.log(custom_sort(array));
コンソールには次の出力が表示されます。
列を指定して多次元配列をソートできる別の方法を次に示します。
[[21, 'MM'], [76, 'AA'], [90, 'SS'],[03, 'GG']]
のような配列を使って調べてみましょう。
コード:
var array = [[21, 'MM'], [76, 'AA'], [90, 'SS'], [03, 'GG']];
array.sort(sort_function);
function sort_function(a, b) {
if (a[0] === b[0]) {
return 0;
} else {
return (a[0] < b[0]) ? -1 : 1;
}
}
console.log(array);
上記のコードの出力は次のとおりです。
ここでは、2D 配列の 1 列目の要素を比較して並べ替えました。
必要に応じて、次の例のように、配列の 2 列目の要素を比較して、多次元配列を並べ替えることができます。
コード:
var array = [[21, 'MM'], [76, 'AA'], [90, 'SS'], [03, 'GG']];
array.sort(sortFunction_col02);
function sortFunction_col02(a, b) {
if (a[1] === b[1]) {
return 0;
} else {
return (a[1] < b[1]) ? -1 : 1;
}
}
console.log(array);
期待される出力:
まとめ
多次元配列の並べ替えでは、必要に応じて列ごとに昇順または降順で比較することにより、配列の要素を簡単に並べ替えて並べ替えることができます。 sort()
メソッドは現在の配列を使用することに注意してください。 したがって、配列が変更されます。
通常、初期配列は、新しい配列を返す他の配列メソッドの影響を受けません。 関数型プログラミングを利用し、関数に副作用がないことが予想される場合、これは覚えておくことが重要です。
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.