JavaScriptで配列の各要素に二次関数f(x)を適用してソートする方法
問題
次のような二次関数が与えられています。
f(x) = ax² + bx + c
ここで、a、b、c は3つの定数です。
この課題では、ソート済みの整数配列 arr を第1引数に、a、b、c をそれぞれ第2、第3、第4引数として受け取るJavaScript関数を作成します。この関数は、配列 arr の各要素に関数 f(x) を適用し、その結果を昇順にソートした配列を返す必要があります。
例えば、関数への入力が次のようであった場合を考えます。
const arr = [-8, -3, -1, 5, 7, 9]; const a = 1; const b = 4; const c = 7;
この場合、期待される出力は次のとおりです。
const output = [ 4, 4, 39, 52, 84, 124 ];
サンプルコード
この問題を解くコードは以下のようになります。
const arr = [-8, -3, -1, 5, 7, 9];
const a = 1;
const b = 4;
const c = 7;
const applyFunction = (arr = [], a = 1, b = 1, c = 1) => {
const apply = (num, a, b, c) => {
const res = (a * (num * num)) + (b * num) + (c);
return res;
};
const result = arr.map(el => apply(el, a, b, c));
result.sort((a, b) => a - b);
return result;
};
console.log(applyFunction(arr, a, b, c));コードの解説
処理の流れは次のとおりです。
まず、Array.prototype.map() を使って配列の各要素に関数 f(x) を適用します。次に、Array.prototype.sort() に比較関数 (a, b) => a - b を渡して、変換後の配列を数値の昇順にソートします。最後に、ソート済みの配列を返します。
なお、元の配列がソート済みであっても、二次関数の変換後は値の順序が崩れる可能性があります。これは放物線の頂点が配列の範囲内に存在する場合、最小値が配列の途中に現れるためです。そのため、変換後に必ずソートを行う必要があります。
出力
コンソールには次のように出力されます。
[ 4, 4, 39, 52, 84, 124 ]
-
JavaScriptで数値の各桁を切り取って配列を作成する方法
問題今回は、数値を受け取り、その数値を先頭から各桁の位置で切り取った文字列を要素として持つ配列を返すJavaScript関数を作成します。例えば、入力が 246 の場合、出力は [2, 24, 246] のようになります。つまり、最初の1桁目だけ、次に2桁目まで、最後に数値全体というように、桁を増やしながら文字列を配列に格納していくイメージです。実装コード例以下は実際のコードです。const num = 246; const cutOffEach = (num = 1) => { const str = String(num); &nbs
-
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 = () =&