javascript - Javascript减少条件
问题描述
仅当累加器 (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
.
感谢您的努力!
解决方案
您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) : '-';
取决于你想要的行为。
推荐阅读
- django - 影响复合类的 Django Mixin 方法
- date - XSLT 1.0 (xsltproc) - 将日期格式从 yyyy-mm-ddthh-mm-ssz 转换为 yyyy-MM-dd HH:mm:ss.SSS Z
- javascript - 使用 javascript 替换 id 和 name
- c - 如何使用此“printf”函数减少参数数量?我应该使用“printf”以外的东西吗?
- r - 如何在 Rcpp 中删除列表的 NULL 元素
- javascript - 如何使点击 div 重定向到另一个页面的锚点
- laravel - php artisan make:auth 终端命令给出空响应
- python - 循环通过json python非常慢
- javascript - 如何从firebase实时数据库中检索数据使用时间戳?
- c# - 为什么即使创建了显式运算符,我也无法将源类型转换为字符串?