如果array.find返回“未定义”,如何为变量设置默认值。
这是导致我出现问题的那条线。在某些情况下,此变量将填充,而在其他情况下,则不会填充,在这种情况下,我希望将其默认设置为0。
this.statistics.creditAmount = response.data.find(t => t.paymentType == 'RF' && t.status == 1).amount || 0;
答案 0 :(得分:3)
代码存在的问题是,在.amount
返回undefined
的情况下,您正在访问array.find
中的undefined
。您可以通过添加防护来解决此问题:
const credit = response.data.find(t =>
t.paymentType == 'RF' && t.status == 1);
this.statistics.creditAmount = credit ? credit.amount : 0;
答案 1 :(得分:1)
另一种方法是使用闭包和具有默认对象/值的分解。
const
getAmount = ({ amount = 0 } = {}) => amount,
credit = getAmount(response.data.find(t => t.paymentType == 'RF' && t.status == 1));
答案 2 :(得分:1)
可能会产生过大杀伤力,但是您可以创建并实现可重用的null传播方法。
const response = {data: []};
const _try = (func, fallbackValue) => {
try {
var value = func();
return (value === null || value === undefined) ? fallbackValue : value;
} catch (e) {
return fallbackValue;
}
}
const result = _try(() => response.data.find(t => t.paymentType == 'RF' && t.status == 1).amount, 0);
console.log(result);
这最初是由tocqueville作为this answer的一部分编写的。
答案 3 :(得分:1)
我看到这个问题已经得到回答,但是我认为这可以有所帮助
const { amount = 0 } = response.data.find(t => t.paymentType === 'RF' && t.status === 1) || {};
this.statistics.creditAmount = amount;
或者您可以使用减速器:
this.statistics.creditAmount = response.data.reduce((amt, t) => t.paymentType === 'RF' && t.status === 1 ? t.amount : amt, 0);
Reducer在遍历整个数组时会使用更多的时钟周期,而Array.prototype.find
一旦到达第一个匹配项就会停止。这也可能导致结果也有所不同,因为reducer的编写方式将从匹配数组中获取 last 项。