JavaScriptで日付文字列の配列から最も古い日付と最新の日付を取得する方法
JavaScriptでは、ISO形式(YYYY-MM-DD HH:MM:SS)の日付文字列は、そのまま文字列比較をしても時系列順に正しく並びます。この特性を利用すると、配列の中から最も古い日付と最新の日付を簡単に見つけることができます。
元となるデータ
まず、次のような日付文字列の配列があるとします。
const arr = [
"2017-01-22 00:21:17.0",
"2017-01-27 11:30:23.0",
"2017-01-24 15:53:21.0",
"2017-01-27 11:34:18.0",
"2017-01-26 16:55:48.0",
"2017-01-22 11:57:12.0",
"2017-01-27 11:35:43.0"
];この配列を受け取り、中から最も古い日付と最新の日付をそれぞれ特定し、それら2つの日付を含むオブジェクトとして返す関数を作成する必要があります。
実装例
ここでは、reduce()メソッドを使って配列を1回走査するだけで最小値と最大値を同時に求めるアプローチを採用します。
const arr = [
"2017-01-22 00:21:17.0",
"2017-01-27 11:30:23.0",
"2017-01-24 15:53:21.0",
"2017-01-27 11:34:18.0",
"2017-01-26 16:55:48.0",
"2017-01-22 11:57:12.0",
"2017-01-27 11:35:43.0"
];
const findMinMaxDate = (arr = []) => {
const res = arr.reduce((acc, val, ind) => {
// 最初の要素の場合は、minとmaxを同じ値で初期化
if (!ind) {
return { min: val, max: val };
}
if (val < acc.min) {
acc.min = val;
}
if (val > acc.max) {
acc.max = val;
}
return acc;
}, undefined);
return res;
};
console.log(findMinMaxDate(arr));コードのポイント
・reduce()の第1引数のコールバック内で、インデックスが0のときだけminとmaxを初期化しています。
・以降の要素については、現在のminより小さければ更新し、現在のmaxより大きければそちらも更新します。
・この方法なら配列全体を一度ループするだけで済み、計算量はO(n)で効率的です。
実行結果
コンソールには次のように出力されます。
{ min: '2017-01-22 00:21:17.0', max: '2017-01-27 11:35:43.0' }なお、日付文字列が「YYYY-MM-DD」から始まる標準的なフォーマットであるため、Dateオブジェクトに変換しなくても辞書順の文字列比較だけで正しい大小判定が可能です。もし独自フォーマットの日付を扱う場合は、事前にnew Date()などで変換してから比較するようにしてください。
-
JavaScriptで実装するマージソートとクイックソートの徹底解説
マージソート(Merge Sort)とは マージソートは、分割統治法(Divide and Conquer)に基づいたソートアルゴリズムです。最悪計算量は O(n log n) と非常に効率的ですが、その代償として追加の O(n) のメモリ領域が必要になるという特徴があります。 ここでは、このアルゴリズムを2つの関数、mergeSort と merge を作成して実装していきます。 merge(マージ) ― 2つの引数(部分的にソートされた2つの配列)を受け取り、要素を正しい順序で挿入しながら1つの配列に結合する関数です。 mergeSort(マージソート) ― 配列の左半分と右半分に対し
-
JavaScriptのArray.prototype.sort()メソッドの使い方をサンプルコードで解説
Array.prototype.sort()は、JavaScriptで配列の要素を並べ替えるための組み込みメソッドです。アルファベット順・数値順といった並び方に加えて、昇順・降順も自由に指定でき、配列操作の中でも特に使用頻度の高いメソッドの一つです。 ただし重要なポイントとして、sort()メソッドはデフォルトではすべての要素を文字列に変換してから比較します。そのため、数値の配列を意図したとおりに並べ替えたい場合は、比較関数を引数として渡す必要があります。 以下は、Array.prototype.sort()メソッドの基本的な使い方を示すサンプルコードです。 サンプルコード <!DOC