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

JavaScriptで時刻オブジェクトの配列を数値ペアの配列に変換する方法

この記事では、時刻情報を持つオブジェクトの配列を、より扱いやすい数値ペアの配列へと変換するJavaScriptの実装方法を解説します。

前提となるデータ

まず、次のようなオブジェクトの配列が与えられていると仮定します。

const arr = [
    {"time":"18:00:00"},
    {"time":"10:00:00"},
    {"time":"16:30:00"}
];

この配列を引数として受け取り、以下の処理を行うJavaScript関数を作成する必要があります。

  • 各オブジェクトから時刻文字列を抽出する(例:18:00:00、10:00:00、16:30:00)

  • 時刻を「[18,0]」「[10,0]」「[16,30]」のような数値ペア形式に変換する

  • 変換結果を1つの配列にまとめる

  • 最終的な配列を返す

つまり、「18:00:00」という文字列から秒を取り除き、時と分だけを数値として配列化するイメージです。このような処理は、グラフ描画やカレンダー機能など、時刻データをプログラム的に扱いたい場面で役立ちます。

実装コード

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

const arr = [
    {"time":"18:00:00"},
    {"time":"10:00:00"},
    {"time":"16:30:00"}
];
const reduceArray = (arr = []) => {
    let res = [];
    res = arr.map(obj => {
        return obj['time'].split(':').slice(0, 2).map(el => {
            return +el;
        });
    });
    return res;
};
console.log(reduceArray(arr));

コードの解説

この関数の処理の流れを順番に見ていきましょう。

  • split(':'):時刻文字列「18:00:00」をコロンで分割し、["18", "00", "00"] という文字列の配列を作成します。

  • slice(0, 2):先頭の2要素(時と分)だけを取り出し、秒の部分を除外します。結果は ["18", "00"] となります。

  • +el:単項プラス演算子を使って、各文字列を数値型に変換します。「00」は 0 に、「30」は 30 になります。

  • map():元の配列の各オブジェクトに対して上記の変換を適用し、新しい配列を生成します。

実行結果

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

[ [ 18, 0 ], [ 10, 0 ], [ 16, 30 ] ]

このように、map()split() を組み合わせることで、わずか数行のコードで時刻文字列を数値ペアの配列へと簡潔に変換できます。デフォルト引数 (arr = []) を設定しているため、引数なしで呼び出された場合でもエラーにならず空の配列を返す、安全な設計になっている点もポイントです。

  1. 【初心者向け】JavaScriptのreverse()メソッドで配列を逆順にする方法

    JavaScriptのreverse()メソッドは、配列の要素を元の順序と逆順に入れ替えるための便利な関数です。このメソッドを呼び出すと、配列の最初の要素が最後に、最後の要素が最初に移動し、配列全体が反転されます。reverse()メソッドの基本reverse()は配列そのものを変更する「破壊的メソッド」である点に注意してください。つまり、元の配列の順序が直接書き換えられます。元の配列を保持したい場合は、あらかじめslice()やスプレッド構文([...arr])などでコピーを作成してからreverse()を使用するのがおすすめです。サンプルコード以下は、ボタンをクリックすると配列の要素が逆順

  2. JavaScriptにおける配列の分割代入(Destructuring)の基本と使い方

    分割代入(Destructuring)とは、配列から値を取り出して個別の変数に展開するための構文です。ES2015(ES6)で導入されたこの機能を使うと、配列の各要素を簡潔かつ読みやすく変数に割り当てることができます。 配列の分割代入のサンプルコード 以下は、JavaScriptで配列の分割代入を行うコード例です。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport&quo