JavaScriptで右側のすべての要素より大きい要素を見つける方法
本記事では、数値の配列を受け取り、元の配列の中で「右側に存在するすべての要素よりも大きい」要素だけを抽出した部分配列を返すJavaScript関数の作成方法を解説します。
例えば、配列 [12, 45, 6, 4, 23, 23, 21, 1] の場合、条件を満たすのは 45、23、21、1 です。最右端の要素は右側に要素が存在しないため、常に条件を満たす点に注意してください。
アプローチ:reduceRight()を使った効率的な実装
この問題は、配列を右から左へ走査しながら「それまでに見つけた最大値」を記録していくことで、1回の走査(O(n))で解くことができます。JavaScriptでは Array.prototype.reduceRight() を使うと、この処理を簡潔に実装できます。
コード例
以下がその実装コードです。
const arr = [12, 45, 6, 4, 23, 23, 21, 1];
const largerThanRight = (arr = []) => {
const creds = arr.reduceRight((acc, val) => {
let { largest, res } = acc;
if(val > largest){
res.push(val);
largest = val;
};
return { largest, res };
}, {
largest: -Infinity,
res: []
});
return creds.res;
};
console.log(largerThanRight(arr));
出力
コンソールには以下のように出力されます。
[ 1, 21, 23, 45 ]
コードの解説
reduceRight() は配列を右端から順に処理します。初期値として、それまでの最大値を保持する largest(初期値は -Infinity)と、結果を格納する配列 res を持つオブジェクトを渡します。
各要素について、現在の最大値より大きければ res に追加し、largest を更新します。この処理を繰り返すことで、右側のすべての要素より大きい要素だけが res に残ります。
なお、配列を右から走査しているため、返される結果は昇順([1, 21, 23, 45])になる点にも注意してください。必要に応じて reverse() を使えば、元の配列と同じ順序で取得できます。
-
JavaScriptでパスカルの三角形のn行目の要素を求める方法
パスカルの三角形とは パスカルの三角形は、前の行の隣接する要素同士を足し合わせていくことで構成される、三角形状の数列配置です。各行の両端は必ず1となり、内側の各要素はそのすぐ上にある2つの要素の和になります。 パスカルの三角形の最初のいくつかの要素は以下の通りです。 求めるもの 今回は、正の整数 num を唯一の引数として受け取り、パスカルの三角形の num 行目に存在するすべての要素を配列として返すJavaScript関数を作成します。 たとえば、入力が次の場合: const num = 9; 期待される出力は以下のようになります。 const output = [1, 9, 36, 8
-
JavaScriptで3つの配列に共通する要素の合計を求める方法
問題今回は、3つの数値型配列を引数として受け取るJavaScript関数を作成します。この関数は、3つの配列すべてに共通して存在する要素だけを抜き出し、それらの合計値を返す必要があります。たとえば、次のような配列が与えられた場合を考えてみましょう。const arr1 = [4, 4, 5, 8, 3]; const arr2 = [7, 3, 7, 4, 1]; const arr3 = [11, 0, 7, 3, 4];この場合、3つの配列すべてに存在するのは「4」と「3」なので、期待される出力は 4 + 3 = 7 となります。解決策のコード例以下がその実装コードです。 { le