如果对象密钥存在,如何格式化响应?

时间:2019-03-05 11:06:04

标签: javascript node.js ecmascript-6

说明

我收到了来自我在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()抛出错误的原因,因为它无法找到未定义的amountcode-因为它们不存在,因为键不存在,所以它们不存在。

如何格式化对象密钥(如果存在),但如果不存在则返回null?这样,retrieveAmounts()不会引发错误,而我只需向我的前端应用程序提供limit:null

2 个答案:

答案 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
});