Javascript 如果存在对象键,如何格式化响应?
说明 我在我的节点后端调用的服务返回了一个响应 然后,我将我的回答转换为一种更友好的形式,就像这样Javascript 如果存在对象键,如何格式化响应?,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,说明 我在我的节点后端调用的服务返回了一个响应 然后,我将我的回答转换为一种更友好的形式,就像这样 export default (response) => { const { limit, debt, outstanding } = response.object; const transformedData = { outstanding: retrieveAmounts(outstanding), limit: retrieveAmounts
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
您可以在retrieveAmounts
函数中放置默认参数,因此在retrieveAmounts函数中放置未定义参数不会产生错误
const retrieveAmounts = (outstanding = { amount: null, code: null }) => ({ // << here
amount: isStringDefined(outstanding.amount) ? amount : null,
currencyCode: isStringDefined(outstanding.code) ? code : null
});
const retrieveAmounts=(未决={amount:null,code:null})=>({/'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
});
这不起作用:-(它将金额和代码带到范围之外,我得到ReferenceError:amount未定义
我用未完成的金额
和未完成的金额
。如果参数未定义,我得到{amount:null,currencyCode:null}
。我没有接受你的答案,因为上面的答案允许将limit返回为null。这里的默认值是什么?返回对象及其属性。+1尽管对于有用的输入,我在传递linter周围的复杂性规则时遇到了问题。还有其他地方可以粘贴未定义的检查吗?尝试了一个函数-中断