Почему суммирование переменной из массива дает мне NaN? (Javascript) - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть этот массив, содержащий встречи:

let appointments = [
{"appointmentId": 001239, "subject": "Something", "Client": "Bob", "StartTime": "2020-04-16T11:00:00.000Z", "EndTime": "2020-04-16T11:30:00.000Z", "km": 90},
{"appointmentId": 001240, "subject": "Something", "Client": "Alvera", "StartTime": "2020-04-16T11:00:00.000Z", "EndTime": "2020-04-16T11:30:00.000Z", "km": 50},
{"appointmentId": 001241, "subject": "Something", "Client": "Bob", "StartTime": "2020-04-17T11:00:00.000Z", "EndTime": "2020-04-17T11:30:00.000Z", "km": 30}]

Теперь я хочу суммировать километры по клиенту, например, Боб: всего: 120. Всего по итогу: 50. А также с отличиями в минутах от StartTime и EndTime. С использованием day js library я вычисляю разницу между временами. Это метод, который делает накопление км и раз. Км работает отлично, однако difference дает NaN. Что я делаю не так?

  var result = [];

   this.appointments.reduce(function (res, value) {
if (!res[value.Client]) {
  res[value.Client] = {
    km: 0,
    Client: value.Client,
    StartTime: dayjs(value.StartTime),

    EndTime: dayjs(value.EndTime),
    difference: dayjs(value.EndTime).diff(dayjs(value.StartTime), 'minute')  % 60

  };
  result.push(res[value.Client])
}
res[value.Client].km += value.km;

res[value.Client].difference += value.difference; //here I try to sum the differences by Client, when I remove this line, I just see the difference of the first appointment.
return res;


 }, {});

1 Ответ

0 голосов
/ 18 апреля 2020

Может быть, это поможет?

let appointments = [
  {
    appointmentId: 001239,
    subject: "Something",
    Client: "Bob",
    StartTime: "2020-04-16T11:00:00.000Z",
    EndTime: "2020-04-16T11:30:00.000Z",
    km: 90
  },
  {
    appointmentId: 001240,
    subject: "Something",
    Client: "Alvera",
    StartTime: "2020-04-16T11:00:00.000Z",
    EndTime: "2020-04-16T11:30:00.000Z",
    km: 50
  },
  {
    appointmentId: 001241,
    subject: "Something",
    Client: "Bob",
    StartTime: "2020-04-17T11:00:00.000Z",
    EndTime: "2020-04-17T11:30:00.000Z",
    km: 30
  }
];

let totals = appointments.reduce(function (res, value) {
  let diff = dayjs(value.EndTime).diff(dayjs(value.StartTime), "minute") % 60;
  if (!res[value.Client]) {
    // set initial value
    res[value.Client] = {
      km: value.km,
      Client: value.Client,
      difference: diff
    };
  } else {
    // sum up
    res[value.Client].km += value.km;
    res[value.Client].difference += diff;
  }
  return res;
}, {});

totals = Object.values(totals);

console.log(totals);
<script src="https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.8.24/dayjs.min.js"></script>
...