JavaScriptで指定した範囲内の自然数の配列を生成して返す方法
はじめに
この記事では、[a, b](a ≤ b)という形式の2つの数値からなる配列を受け取り、a から b までのすべての自然数(両端の値を含む)を要素とする配列を返す JavaScript 関数の実装方法を解説します。
問題
作成する関数は、範囲を指定する配列 [a, b](ただし a ≤ b)を引数として受け取り、その範囲に含まれるすべての自然数を配列として返す必要があります。境界値である a と b 自身も結果に含める点がポイントです。
サンプルコード
以下が基本的な実装例です。
const range = [6, 45];
const naturalBetweenRange = ([lower, upper] = [1, 1]) => {
if(lower > upper){
return [];
};
const res = [];
for(let i = lower; i <= upper; i++){
res.push(i);
};
return res;
};
console.log(naturalBetweenRange(range));コードの解説
この関数の仕組みを順番に見ていきましょう。
1. 分割代入による引数の受け取り: 引数の配列から下限値 lower と上限値 upper を取り出しています。デフォルト値として [1, 1] を設定しているため、引数なしで呼び出してもエラーにはなりません。
2. 不正な入力への対応(ガード節): 下限値が上限値より大きい場合は空の配列を返して処理を終了します。これにより、逆転した範囲が渡されても安全に動作します。
3. forループでの配列構築: lower から upper までの各数値を順番に結果配列 res へ追加し、最後にその配列を返しています。
別の実装方法:Array.from() を活用
より簡潔に書きたい場合は、Array.from() を使う方法もあります。
const naturalBetweenRange = ([lower, upper] = [1, 1]) =>
Array.from({ length: Math.max(0, upper - lower + 1) }, (_, i) => i + lower);こちらの方法では、要素数を upper - lower + 1 で計算し(Math.max により負の範囲にも対応)、マップ関数で各インデックスに下限値を加算することで、同じ結果を1行で得られます。
出力
コンソールには以下のように出力されます。
[ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45 ]
まとめ
範囲内の自然数列を生成する処理は、forループによる逐次的な追加でも、Array.from() による宣言的な記述でも実現できます。用途や可読性の観点から、プロジェクトに合った方法を選択するとよいでしょう。
-
JavaScriptで入力配列の末尾からn個の偶数を抽出して返す方法
問題数値の配列を第1引数として、数値を第2引数として受け取るJavaScript関数を作成します。この関数の役割は、入力配列の中から末尾側に近い方からn個の偶数を選び出し、それらを新しい配列として返すことです。たとえば、配列 [1, 2, 3, 4, 5, 6, 7, 8, 9] と数値 3 を渡した場合、期待される結果は [4, 6, 8] になります。実装例以下がそのコードです。const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; const num = 3; const pickEvens = (arr = [], num = 1) => { c
-
JavaScriptで指定範囲内の数値の立方和を計算する方法
問題今回は、2つの数値からなる範囲配列を受け取り、その範囲内に含まれるすべての数値の立方数(3乗した値)を合計して返すJavaScript関数を作成します。たとえば、範囲が [4, 11] の場合、4³ から 11³ までの合計を求めることになります。解決のアプローチこの問題は次の手順で解くことができます。範囲の下限から上限まで、順番に各数値を取り出す取り出した数値を3乗する3乗した値を累積し、最終的な合計を返すコード例実際の実装コードは以下の通りです。const range = [4, 11]; const sumCubes = ([l, h]) => { const find