JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

【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レスポンスの並べ替えや表示順の制御など、実務でも応用範囲の広いテクニックです。

  1. 【JavaScript】先頭要素の位置を維持したまま整数配列をソートする方法

    本記事では、数値の配列を受け取り、特定のルールに従って並べ替えるJavaScript関数の実装方法を解説します。並べ替えのルール今回実装する関数は、以下の条件を満たす必要があります。配列の先頭要素(array[0])は元の位置に固定する先頭要素より大きい整数がある場合は、その直後に配置する残りの整数は、最小値から昇順に並べる入力と出力の例例として、次の配列を考えてみましょう。const arr = [10, 7, 12, 3, 5, 6];この場合、期待される出力は以下の通りです。const output = [10, 12, 3, 5, 6, 7];先頭の「10」はそのままの位置に留まり、そ

  2. 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番目の要素(