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

JavaScriptで別の配列をもとに月の範囲を配列から取得する方法


ここでは、次のような文字列の配列が2つあると仮定します。1つ目の配列には、1年12か月それぞれに対応する文字列が格納されています。

const year = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];

2つ目の配列は、月の範囲を表す2つの文字列で構成されています。

const monthsRange = ['aug', 'oct'];

今回の課題は、このような2つの配列を受け取るJavaScript関数を実装することです。関数は、2つ目の配列で指定された範囲に該当する月を、1つ目の配列からすべて抽出して返す必要があります。

上記の配列の場合、期待される出力は以下のとおりです。

const output = ['aug', 'sep'];

出力には範囲の終端である「oct」が含まれていない点に注意してください。これは意図的な仕様であり、この関数は開始月を含み、終了月を含まない範囲を返します。

実装例

const year = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
const range = ['aug', 'dec'];

const getMonthsInRange = (year, range) => {
    const start = year.indexOf(range[0]);
    const end = year.indexOf(range[1] || range[0]);
    // 範囲が逆順でも動作する
    if (start <= end) {
        return year.slice(start, end);
    } else {
        // 年をまたぐ範囲(例:「nov」〜「feb」)にも対応
        return year.slice(start).concat(year.slice(0, end));
    }
};
console.log(getMonthsInRange(year, range));

出力

コンソールには次のように出力されます。

[ 'aug', 'sep', 'oct', 'nov' ]

コードのポイント

  • indexOf():指定した要素が配列内で最初に出現するインデックスを返します。ここでは、開始月と終了月それぞれの位置を取得するために使用しています。
  • slice(start, end):開始インデックスから終了インデックスの直前までの要素を、新しい配列として切り出します。終了位置自体は含まれないため、「終端月を除外する」という仕様と自然に一致します。
  • 年をまたぐ範囲への対応:start が end より大きい場合(例:「nov」〜「feb」など)、year.slice(start) で年末側の要素を取得し、year.slice(0, end) で年始側の要素を連結することで、正しく範囲を抽出できます。

  1. 【初心者向け】JavaScriptのArray.from()メソッドの使い方を実例で解説

    JavaScript の Array.from() メソッドは、length プロパティを持つオブジェクト(配列風オブジェクト)や、文字列・Map・Set などの反復可能(イテラブル)なオブジェクトから、新しい Array オブジェクトを生成して返すためのメソッドです。元のオブジェクトは変更されず、常に新しい配列インスタンスが返されます。 基本構文 Array.from(obj, mapFunction, val) パラメータの説明 obj:配列へ変換したい対象のオブジェクト。配列風オブジェクト(length プロパティを持つもの)や反復可能なオブジェクトを指定します。 mapFunctio

  2. JavaScriptのArray.from()メソッドとは?使い方と実例をわかりやすく解説

    Array.from()メソッドは、配列風オブジェクト(array-like)や反復可能オブジェクト(iterable)から、新しい配列オブジェクトを作成するための便利なメソッドです。文字列、Map、Set、NodeListなど、さまざまなデータを手軽に配列へ変換できます。 Array.from()の基本的な動作 例えば、文字列「HelloWorld」に対してArray.from()を使用すると、1文字ずつ分割された新しい配列が生成されます。以下に実際のコード例を示します。 サンプルコード <!DOCTYPE html> <html lang="ja"&g