我有parseNotAvailable
基于版本的函数有一些逻辑,所以我有penalties
版本2,但我需要有与版本1相同的逻辑,所以我试图传递为null得到0,但它不起作用并抛出错误。
有什么更好的方法来实现上述任务吗?
主.js
let newPrice = {
copayEmployer: parseNotAvailable('N/A', 1),
penalties: parseNotAvailable('N/A', null),
secondaryClaimNumber: parseNotAvailable('N/A',2)
};
function parseNotAvailable(value, version) {
if ((value === 'N/A' || value === 'n/a') && (version || version === 1)) {
return 0;
} else if ((value === 'N/A' || value === 'n/a') && version === 2) {
return null;
} else {
return parseFloat(value);
}
};
// console.log(parseNotAvailable('N/A', 1));
console.log(newPrice);
预期成果
{ copayEmployer: 0, penalties: 0, secondaryClaimNumber: null }
用上面的代码返回
{ copayEmployer: 0, penalties: NaN, secondaryClaimNumber: 0 }
parseNotAvailable('N/A', null)
版本中是null
的,并且不传递if
语句 na 转到 else 语句return parseFloat(value);
parseNotAvailable('N/A', 2)
版本中2
,如果语句... ||(value || value === 1)
和return 0;
,则首先通过
你有错误的断言if ((value === 'N/A' || value === 'n/a') && (version || version === 1))
它应该是if ((value === 'N/A' || value === 'n/a') && (!version || version === 1))
您的代码正在流向else
块并尝试尝试parseInt('N/A')
,这显然是NaN
。你可能想重新考虑你在那里的条件。如您所见,我在代码中添加了一个简单的isNaN
检查:
try {
let newPrice = {
copayEmployer: parseNotAvailable('N/A', 1),
penalties: parseNotAvailable('N/A', null),
secondaryClaimNumber: parseNotAvailable('N/A', 2)
};
console.log(newPrice);
} catch (err) {
console.error(err)
}
function parseNotAvailable(value, version) {
if ((value === 'N/A' || value === 'n/a') && (version || version === 1)) {
return 0;
} else if ((value === 'N/A' || value === 'n/a') && version === 2) {
return null;
} else {
//Do a check here for NaN value - this probably isnt needed if you straigten out your flow control conditions
if (isNaN(value)) {
throw `${value} is NaN`;
}
return parseFloat(value);
}
};