为什么对数组中的变量求和会得到 NaN? (Javascript)
Why does summing up a variable from an array give me NaN? (Javascript)
我有这个包含约会的数组:
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}]
现在我想要的是按客户对公里数求和,例如 Bob:总计:120。Alvera 总计:50。
还有 StartTime 和 EndTime 的分钟数差异。使用 dayjs library 我计算时间之间的差异。这是一种累加公里和时间的方法。 km 完美运行,但是,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;
}, {});
也许这有帮助?
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>
我有这个包含约会的数组:
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}]
现在我想要的是按客户对公里数求和,例如 Bob:总计:120。Alvera 总计:50。
还有 StartTime 和 EndTime 的分钟数差异。使用 dayjs library 我计算时间之间的差异。这是一种累加公里和时间的方法。 km 完美运行,但是,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;
}, {});
也许这有帮助?
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>