JavaScriptで2つの配列の対応する各要素にカスタム関数を適用する方法
問題
ここでは、次のようなJavaScript関数を作成する必要があります。
- 第一引数:2つの引数を受け取り、値を返すコールバック関数
- 第二引数・第三引数:ほぼ同じ長さの2つの配列
この関数は、2つの入力配列から対応する要素同士をペアにしてコールバック関数へ渡し、その戻り値を要素とする新しい配列を構築して返すものとします。
実装例
以下のコードをご覧ください。
const arr1 = [1, 2, 3, 4];
const arr2 = [5, 6, 7, 8];
const add = (a, b) => a + b;
const applyFunction = (callback = () => {}, arr1 = [], arr2 = []) => {
const res = [];
arr1.forEach((num1, ind) => {
const num2 = arr2[ind];
res.push(callback(num1, num2));
});
return res;
};
console.log(applyFunction(add, arr1, arr2));処理の流れ
applyFunctionは、コールバック関数と2つの配列を受け取ります。引数が省略された場合に備え、デフォルト値も設定されています。forEachメソッドを使い、arr1の各要素を先頭から順に処理しながら、同じインデックス位置にあるarr2の要素を取得します。- 取得した2つの値をコールバック関数に渡し、その戻り値を結果配列
resへ追加していきます。 - すべての要素の処理が完了した時点で、新しい配列を呼び出し元に返します。
出力結果
[6, 8, 10, 12]
この例では、add関数が各ペア(1+5、2+6、3+7、4+8)に対して適用され、それぞれの合計値からなる新しい配列が出力されます。
なお、元の配列は変更されず、常に新しい配列が生成されるため、イミュータブルなデータ操作が必要な場面でも安全に利用できます。同様の処理はArray.prototype.map()と組み合わせることでも実現可能ですが、この手法なら2つの配列を並行して走査できる点が大きな利点です。
-
JavaScriptで2つのソート済み配列を1つのソート済み配列にマージする方法
問題2つの数値のソート済み配列を受け取り、両方の配列のすべての要素を新しい配列へマージし、同じ順序でソートされた状態の新しい配列として返すJavaScript関数を作成する必要があります。この操作はマージソートの中核となる処理でもあり、効率的なアルゴリズム設計における重要なテクニックです。concat()後にsort()する方法もありますが、すでにソート済みの配列同士をマージする場合は、両端ポインタ(Two Pointers)を使ったアプローチの方がはるかに効率的です。解決のアプローチ:Two Pointers(双方向ポインタ)基本的な考え方は以下の通りです。インデックス変数 i と j を用
-
JavaScriptで配列内の特定の数値に最も近い2つの要素を検索する方法
問題の概要JavaScriptで、ソート済みの整数配列 arr を第一引数に、目標となる数値 target を第二引数に受け取る関数を作成します。この関数は、配列内に存在する要素の中から target に最も近い2つの数値を選び、それらを昇順に並べた配列として返す必要があります。例えば、以下のような入力が与えられた場合を考えてみましょう。入力:const arr = [1, 2, 3, 4, 5];const target = 3;出力:const output = [2, 3];この場合、target の値が 3 であるため、最も近い2つの要素は 2 と 3 となり、昇順に並べて [2, 3