奇怪的解构赋值,给出 undefined
Strange destructuring assignment, giving undefined
const apiConfig = JSON.parse(process.env.apiConfig);
const securityContextConfigurations = _.get(
apiConfig,
'agpAPIs',
{});
/// what is going here?
const {
securityContext : { apiKey, securityType }
} = securityContextConfigurations;
/// end what is going on here?
/// securityContext always comes back as undefined even though there is data in the securityContextConfigurations object
const securityContext = { apiKey, securityType };
const { serviceContext } = apiConfig;
serviceContext.refID = v5(serviceContext.refID, v1());
return Promise.resolve({ securityContext, serviceContext });
securityContextConfigurations
是一个对象,我要查找的键值对位于 securityContextConfigurations
对象中,但我的代码总是在我所在的特定 const
上失败我正在尝试为 securityContext
创建对象
我从来没有见过这样的模式,我想知道是否有办法简化它。
这是一种复杂的解构赋值形式
您可能熟悉这种更简单的类型。
const a={b:3, c:"hello"}
const {b, c} = a
console.log("b is ",b)
console.log("c is ",c)
这里他们只是做了一个额外的水平。
const securityContextConfigurations = {
securityContext: {
apiKey: "hello",
securityType: "high"
}
}
const {
securityContext: {
apiKey,
securityType
}
} = securityContextConfigurations;
// The innermost items are extracted as variables
console.log("apiKey is", apiKey)
console.log("securityType is", securityType)
// However "securityContext" is not extracted as a variable
请记住,在 JS 中 {a, b} 是 shorthand for {a:a, b:b}。为了探究发生了什么,我们可以在“:”的两侧放置不同的变量名。
const securityContextConfigurations = {
securityContext: {
apiKey: "hello",
securityType: "high"
}
}
const {
securityContext: {
apiKey:x,
securityType:y
}
} = securityContextConfigurations;
// The destination variable name on the *right hand side* of the ":". The variable name on the left of the ":" is only to tell JS which element of the source to extract.
console.log("x is", x)
console.log("y is", y)
// apiKey, securityType and securityContext are not extracted as variabels.
如果有什么安慰的话,我已经用 JS 编码十多年了,而且我以前也从未见过它。 8-)
程序员可能在做什么
出于他们最了解的原因,他们想提取较小的元素,然后将它们重新组装成更大的对象 securityContext
。
因此您突出显示的代码得到 仅 apiKey
和 securityType
.
之后的行重建了一个包含这些元素的新对象securityContext
。
通常你我可能会直接得到securityContext
,然后提取元素securityType
和apiKey
。
也许作者试图避免 获取 securityContext
除了这两个以外的任何其他部分?这就是为什么他们选择先提取它们,然后重新组装一个只有所需项目的新 securityContext
。
如何重写它以使其更易于理解
const apiKey = securityContextConfigurations.apiKey
const securityType = securityContextConfigurations.securityType
const securityContext = { apiKey, securityType };
const apiConfig = JSON.parse(process.env.apiConfig);
const securityContextConfigurations = _.get(
apiConfig,
'agpAPIs',
{});
/// what is going here?
const {
securityContext : { apiKey, securityType }
} = securityContextConfigurations;
/// end what is going on here?
/// securityContext always comes back as undefined even though there is data in the securityContextConfigurations object
const securityContext = { apiKey, securityType };
const { serviceContext } = apiConfig;
serviceContext.refID = v5(serviceContext.refID, v1());
return Promise.resolve({ securityContext, serviceContext });
securityContextConfigurations
是一个对象,我要查找的键值对位于 securityContextConfigurations
对象中,但我的代码总是在我所在的特定 const
上失败我正在尝试为 securityContext
我从来没有见过这样的模式,我想知道是否有办法简化它。
这是一种复杂的解构赋值形式
您可能熟悉这种更简单的类型。
const a={b:3, c:"hello"}
const {b, c} = a
console.log("b is ",b)
console.log("c is ",c)
这里他们只是做了一个额外的水平。
const securityContextConfigurations = {
securityContext: {
apiKey: "hello",
securityType: "high"
}
}
const {
securityContext: {
apiKey,
securityType
}
} = securityContextConfigurations;
// The innermost items are extracted as variables
console.log("apiKey is", apiKey)
console.log("securityType is", securityType)
// However "securityContext" is not extracted as a variable
请记住,在 JS 中 {a, b} 是 shorthand for {a:a, b:b}。为了探究发生了什么,我们可以在“:”的两侧放置不同的变量名。
const securityContextConfigurations = {
securityContext: {
apiKey: "hello",
securityType: "high"
}
}
const {
securityContext: {
apiKey:x,
securityType:y
}
} = securityContextConfigurations;
// The destination variable name on the *right hand side* of the ":". The variable name on the left of the ":" is only to tell JS which element of the source to extract.
console.log("x is", x)
console.log("y is", y)
// apiKey, securityType and securityContext are not extracted as variabels.
如果有什么安慰的话,我已经用 JS 编码十多年了,而且我以前也从未见过它。 8-)
程序员可能在做什么
出于他们最了解的原因,他们想提取较小的元素,然后将它们重新组装成更大的对象 securityContext
。
因此您突出显示的代码得到 仅 apiKey
和 securityType
.
之后的行重建了一个包含这些元素的新对象securityContext
。
通常你我可能会直接得到securityContext
,然后提取元素securityType
和apiKey
。
也许作者试图避免 获取 securityContext
除了这两个以外的任何其他部分?这就是为什么他们选择先提取它们,然后重新组装一个只有所需项目的新 securityContext
。
如何重写它以使其更易于理解
const apiKey = securityContextConfigurations.apiKey
const securityType = securityContextConfigurations.securityType
const securityContext = { apiKey, securityType };