【JavaScript】1つ目の配列の要素順に従って2つ目の配列をソートする方法
はじめに
以下のような2つの配列があるとします。
const arr1 = ['d','a','b','c'];
const arr2 = [{a:1},{c:3},{d:4},{b:2}];
今回の課題は、この2つの配列を受け取るJavaScript関数を作成し、1つ目の配列(arr1)の要素の順序に従って、2つ目の配列(arr2)を並べ替えることです。
つまり、2つ目の配列に含まれる各オブジェクトのキーを、1つ目の配列の要素順に合わせてソートする必要があります。
したがって、期待される出力は次のようになります。
const output = [{d:4},{a:1},{b:2},{c:3}];
実装コード
それでは、実際のコードを見ていきましょう。
const arr1 = ['d','a','b','c'];
const arr2 = [{a:1},{c:3},{d:4},{b:2}];
const sortArray = (arr1, arr2) => {
arr2.sort((a, b) => {
const aKey = Object.keys(a)[0];
const bKey = Object.keys(b)[0];
return arr1.indexOf(aKey) - arr1.indexOf(bKey);
});
};
sortArray(arr1, arr2);
console.log(arr2);
コードの解説
この関数の仕組みは以下のとおりです。
Object.keys(a)[0]で、各オブジェクトの最初のキー(例:{a:1}なら'a')を取得します。arr1.indexOf()を使い、そのキーが1つ目の配列の何番目に位置するかを調べます。- 両者のインデックスの差を
sort()の比較関数として返すことで、arr1 の要素順どおりに arr2 が並べ替えられます。
注意点: JavaScriptの sort() メソッドは元の配列を直接変更(破壊的メソッド)します。元の配列を保持したい場合は、あらかじめスプレッド構文などでコピーしておくと安全です。
出力結果
コンソールには次のように表示されます。
[ { d: 4 }, { a: 1 }, { b: 2 }, { c: 3 } ]
このように、わずか数行のコードで、基準となる配列の順序に合わせた柔軟なソート処理を実現できます。APIレスポンスの並べ替えや表示順の制御など、実務でも応用範囲の広いテクニックです。
-
【JavaScript】先頭要素の位置を維持したまま整数配列をソートする方法
本記事では、数値の配列を受け取り、特定のルールに従って並べ替えるJavaScript関数の実装方法を解説します。並べ替えのルール今回実装する関数は、以下の条件を満たす必要があります。配列の先頭要素(array[0])は元の位置に固定する先頭要素より大きい整数がある場合は、その直後に配置する残りの整数は、最小値から昇順に並べる入力と出力の例例として、次の配列を考えてみましょう。const arr = [10, 7, 12, 3, 5, 6];この場合、期待される出力は以下の通りです。const output = [10, 12, 3, 5, 6, 7];先頭の「10」はそのままの位置に留まり、そ
-
JavaScriptで複数の配列から要素を交互に取り出して1つの配列にまとめる方法
問題 今回は、任意の個数の配列を引数として受け取り、それらすべての配列から要素を交互に(順番に一つずつ)取り出して、新しい配列を組み立てるJavaScript関数を作成します。 例えば、関数への入力が次のような場合を考えてみましょう。 入力 const arr1 = [1, 2, 3, 4]; const arr2 = [11, 12, 13, 14]; const arr3 = [a, b, c]; 出力 const output = [1, 11, a, 2, 12, b, 3, 13, c, 4, 14]; ご覧のとおり、まず各配列の先頭要素(1、11、a)、次に各配列の2番目の要素(