说明
我收到了来自我在NODE后端上调用的Service的回复。
然后,我以一种更加友好的格式转换自己的回复,就像这样;
export default (response) => {
const {
limit,
debt,
outstanding
} = response.object;
const transformedData = {
outstanding: retrieveAmounts(outstanding),
limit: retrieveAmounts(limit),
debt: retrieveAmounts(debt)
};
return _omitBy(transformedData, value => value === null);
};
如您所见,我正在每个项目上运行一个函数retrieveAmounts(value)
。
const retrieveAmounts = ({ amount, code }) => ({
amount: isStringDefined(amount) ? amount : null,
currencyCode: isStringDefined(code) ? code : null
});
更新
retrieveAmounts()
依次调用isDefinedString
,它检查提供的类型和长度,就像这样;
const isDefinedString = value => typeof value === 'string' && value.length > 0;
问题在于两者都存在;债务和限额是必需的,并且将始终返回-未偿还不是。如果没有任何显示,则对象键将根本不存在。
这是retrieveAmounts()
抛出错误的原因,因为它无法找到未定义的amount
或code
-因为它们不存在,因为键不存在,所以它们不存在。
如何格式化对象密钥(如果存在),但如果不存在则返回null?这样,retrieveAmounts()
不会引发错误,而我只需向我的前端应用程序提供limit:null
。
答案 0 :(得分:2)
'undefined'不能被解构。销毁之前,您需要检查它是否未定义。
let limit = {'amount': '1000', 'code': '£'}, outstanding = undefined, debt = {'amount': '900', 'code': '£'};
const retrieveAmounts = amountStruct => {
if (typeof amountStruct === 'undefined')
return null;
let {amount, code} = amountStruct;
return {
amount: isStringDefined(amount) ? amount : null,
currencyCode: isStringDefined(code) ? code : null
};
};
按照@ alex35的代码内联。
const retrieveAmounts = (amountStruct) => ((typeof amountStruct === 'undefined') ? null : {
amount: isStringDefined(amountStruct.amount) ? amountStruct.amount : null,
currencyCode: isStringDefined(amountStruct.code) ? amountStruct.code : null
});
答案 1 :(得分:1)
您可以将默认参数放入retrieveAmounts
函数中,因此将undefined放入您的resolveAmounts函数中不会产生错误。
const retrieveAmounts = (outstanding = { amount: null, code: null }) => ({ // << here
amount: isStringDefined(outstanding.amount) ? amount : null,
currencyCode: isStringDefined(outstanding.code) ? code : null
});