1

日付の配列があり、日付を年ごとにグループ化し、最後の値である最初の値を減算したいと考えています。たとえば、次の配列があります。

const data = [
  { x: "2021-10-17T14:38:45.540Z", y: 2 },
  { x: "2021-10-17T13:38:45.540Z", y: 2 },
  { x: "2021-09-16T14:36:46.540Z", y: 1 },
  { x: "2021-01-04T14:35:46.540Z", y: 2 },
  { x: "2021-01-01T14:30:46.540Z", y: 1 },
  { x: "2020-02-01T06:28:47.520Z", y: 12 },
  { x: "2020-02-01T07:28:47.520Z", y: 12 },
  { x: "2019-04-13T10:19:20.034Z", y: 20 },
  { x: "2018-01-01T09:09:19.134Z", y: 4 },
  { x: "2017-01-01T12:09:19.034Z", y: 11 },
  { x: "2016-01-02T12:10:20.034Z", y: 24 },
  { x: "2016-01-02T11:10:20.034Z", y: 14 }
];

これは私が試したものですオブジェクトの配列を年ごとにグループ化し、最後の値-最初の値を減算します

値を合計するこの結果を得ました:

 [
  {
    "value": 8,
    "label": "2021"
  },
  {
    "value": 24,
    "label": "2020"
  },
  {
    "value": 20,
    "label": "2019"
  },
  {
    "value": 4,
    "label": "2018"
  },
  {
    "value": 11,
    "label": "2017"
  },
  {
    "value": 38,
    "label": "2016"
  }
]

年間の予想出力 (値 = 最後の値 - 最初の値):

 [
  {
    "value": 1,
    "label": "2021"
  },
  {
    "value": 0,
    "label": "2020"
  },
  {
    "value": 20,
    "label": "2019"
  },
  {
    "value": 4,
    "label": "2018"
  },
  {
    "value": 11,
    "label": "2017"
  },
  {
    "value": 10,
    "label": "2016"
  }
]

これは、年ごとのグループ関数です。

function group_by_year(arr) {
  return Object.values(
    arr.reduce((a, { x: date_string, y: value }) => {
      const { year } = get_date_parts(date_string);
      if (a[year] === undefined) {
        a[year] = { value: 0, label: year };
      }
      a[year].value += value; // the problem (lastValue - firstValue)

      return a;
    }, {})
  );
}

a[year].value += value;問題は、この行を次のように変更する方法ですa[year].value = lastValue - firstValue;

4

2 に答える 2