仅当累加器(a)和currentValue(b)都是整数时,如何使用reduce来返回总和?
我的guestGroups数组:
"guestGroups":[
{
"bookingNumber":"21.05.201827.05.20181208",
"arrivalDate":"2018-05-19T22:00:00.000Z",
"departureDate":"2018-05-25T22:00:00.000Z",
"customerId":1,
"fields":[
{
"value":"2",
"display_name":"Personen Anzahl",
"servicio_tags":[
"person-number-info"
]
}
],
"number":"041"
}
]
getPersonNumberAdult() {
const personNumberField = this.fields.find(f => {
return f.servicio_tags && f.servicio_tags.includes('person-number-info');
});
return personNumberField ? Number(personNumberField.value.match(/\d+/)[0]) : '-';
}
isInt(value) {
let x = parseFloat(value);
return !isNaN(value) && (x | 0) === x;
}
guestInfo: t.guestGroups
.map(gg => gg.getPersonNumberAdult())
.reduce((function(a, b) {
if (a && b) {
{
if (this.isInt(a) && this.isInt(b)) {
return a + b
} else {
return '-'
}
}
}
}), 0)
这给了我undefined
。
感谢您的努力!
答案 0 :(得分:3)
您的getPersonNumberAdult
不应返回数字或字符串。它应返回整数或NaN
(如果没有可用的数字)。 '-'
仅应在最后格式化输出时使用。
一旦知道了,就可以过滤掉无效值,然后将其余的值相加:
const sum = t.guestGroups
.map(gg => gg.getPersonNumberAdult())
.filter(v => isInt(v)) // or just !isNaN
.reduce((a, b) => a + b, 0);
或将它们求和,然后将NaN
替换为'-'
(如果任何值无效)
const sum = t.guestGroups
.map(gg => gg.getPersonNumberAdult())
.reduce((a, b) => a + b, 0);
const output = isInt(sum) ? String(sum) : '-';
取决于您想要的行为。