1. ホーム
  2. javascript

[解決済み] クライアント側でオブジェクトの配列から最新の日付を取得するエレガントな方法は何ですか?

2023-01-06 18:23:47

質問

プロジェクトでangularjsを使用しています。

私はサーバーからオブジェクトの配列を取得します。 各オブジェクトはいくつかのプロパティを含んでおり、そのうちの1つは日付プロパティです。

以下は、サーバから取得した配列(json形式)です。

[
  {
    "Address": 25,
    "AlertType": 1,
    "Area": "North",
    "MeasureDate": "2019-02-01T00:01:01.001Z",
    "MeasureValue": -1
  },
  {
    "Address": 26,
    "AlertType": 1,
    "Area": "West",
    "MeasureDate": "2016-04-12T15:13:11.733Z",
    "MeasureValue": -1
  },
  {
    "Address": 25,
    "AlertType": 1,
    "Area": "North",
    "MeasureDate": "2017-02-01T00:01:01.001Z",
    "MeasureValue": -1
  }
          .
          .
          .
]

配列から最新の日付を取得したい。

オブジェクトの配列から最新の日付を取得するためのエレガントな方法は何ですか?

どのように解決するのですか?

きれいな方法としては、各日付を Date() に変換し、その最大値を

ES6です。

new Date(Math.max(...a.map(e => new Date(e.MeasureDate))));

JS:

new Date(Math.max.apply(null, a.map(function(e) {
  return new Date(e.MeasureDate);
})));

ここで a はオブジェクトの配列です。

これは、配列の中のそれぞれのオブジェクトを、の値で作成された日付にマップするものです。 MeasureDate . このマッピングされた配列は Math.max 関数を使用して最新の日付を取得し、その結果を日付に変換します。

文字列の日付をJSのDateオブジェクトにマッピングすることで、最終的に以下のような解決策を使うことになります。 配列内の日付の最小/最大値?

--

よりクリーンでない解決策は、単純にオブジェクトを MeasureDate の値にマップし、文字列の配列をソートすることです。 これは、あなたが使用している特定の日付フォーマットのためにのみ機能します。

a.map(function(e) { return e.MeasureDate; }).sort().reverse()[0]

パフォーマンスが気になる場合は reduce を使う代わりに、最大値を得るために配列の sortreverse .