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

JavaScriptでデフォルト引数とmap()を使って配列を経過時間の新しい配列にマッピングする方法

問題の概要

ストップウォッチの開始時刻(startTime)と停止時刻(stopTime)をペアで保持する、次のようなオブジェクトの配列が与えられたとします。

const arr = [
    { startTime: 1234, stopTime: 2345 },
    { startTime: 3452, stopTime: 9304 },
    { startTime: 2345, stopTime: 7432 },
    { startTime: 4567, stopTime: 6252 }
];

ここで求められているのは、このような配列を1つ受け取り、各エントリーごとに実際に経過した時間(stopTime − startTime)を計算し、その結果を要素とする新しい配列を返すJavaScript関数を作成することです。

上記の配列の場合、期待される出力は次のようになります。

const output = [ 1111, 5852, 5087, 1685 ];

解決策:map()メソッドによる実装

この問題は、Array.prototype.map()メソッドを使うことで簡潔に解決できます。関数の引数にはデフォルト値として空の配列を設定しておくことで、引数が渡されなかった場合でもエラーにならず安全に動作するようにしています。

コードは以下の通りです。

const arr = [
    { startTime: 1234, stopTime: 2345 },
    { startTime: 3452, stopTime: 9304 },
    { startTime: 2345, stopTime: 7432 },
    { startTime: 4567, stopTime: 6252 }
];
const findInterval = (arr = []) => {
    let res = [];
    res = arr.map(el => {
        const { startTime: sT, stopTime: eT } = el;
        const interval = eT - sT;
        return interval;
    });
    return res;
};
console.log(findInterval(arr));

コードのポイント

  • デフォルト引数(arr = []) のように引数に初期値を設定することで、引数なしで呼び出された場合にも安全に動作します。
  • 分割代入:オブジェクトからstartTimestopTimeを取り出しつつ、より短い変数名(sTeT)にリネームして可読性を高めています。
  • map():元の配列を破壊的に変更せずに、各要素を計算結果である経過時間へと変換した新しい配列を生成します。

実行結果

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

[ 1111, 5852, 5087, 1685 ]
  1. JavaScriptでオブジェクトを新しい配列に変換する方法

    JavaScriptでは、オブジェクトのプロパティやネストされたデータを取り出し、扱いやすい形で新しい配列にフォーマットできます。本記事では、学校(school)オブジェクトに含まれる生徒情報を、文字列形式の配列へ変換する実践的なコード例を紹介します。 ポイントとなるテクニック このサンプルでは、以下の2つのJavaScript機能を活用しています。 分割代入(Destructuring assignment):オブジェクトから特定のプロパティを簡潔に取り出す構文です。 for...of ループ:配列内の各要素を順番に処理するために使用します。 コード例 <!DOCTYPE html

  2. JavaScriptでnull・空のオブジェクトを含む配列に値を割り当てる方法

    JavaScriptでは、forEach()メソッドとObject.keys()メソッドを組み合わせることで、nullや空のオブジェクトを含む配列に対して効率的に値を割り当てることができます。本記事では、実際のコード例を交えながら、その具体的な実装方法をわかりやすく解説します。 サンプルコード 以下は、JavaScriptを使用してnull/空のオブジェクトを持つ配列に値を割り当てるコード例です。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&qu