Javascript 从许多对象中检测单个定义的对象
Javascript detect a single defined object out of many objects
这里的措辞有点尴尬,但我知道有一个聪明的方法可以解决这个问题。我正在请求来自 JSON 对象的数据。此 JSON 对象将具有“城市”、“城镇”或“语言环境”。它只会有一个。我有一些冗长的分层 'if undefined' 检查,它们只是相互堆叠,直到找到正确的检查,但我想使用运算符一定有更好的方法。这段代码有效,我只是相信它应该做得更好。这是一个例子:
var town = response.data["locale"];
if(town === undefined){
town = response.data["town"];
if(town === undefined){
town = response.data["city"];
if(town === undefined){
town = "N/A";
}
}
}
如您所见,我只想将我的变量分配给任何一个存在的变量。我发现这个嵌套的“if 语句”完全是个碍眼的东西。也许我的问题可以帮助将来的人们编写更清晰的代码。我不太擅长运算符,但这种情况似乎不需要使用任何三元运算符。
例如,您可以在定义变量时使用 or (||
) 运算符。它检查第一个是否未定义,如果是,它将尝试使用第二个,依此类推
在你的情况下,你可以将它替换为这一行。
let town = response.data["locale"] || response.data["town"] || response.data["city"] || "N/A";
您用 node.js, so I’ll assume you’re using Node.js and have modern JavaScript available. The nullish coalescing operator ??
标记的问题几乎完全相同:
let town = response.data.locale ?? response.data.town ?? response.data.city ?? "N/A";
您也可以避免重复 response
:
let {data} = response;
let town = data.locale ?? data.town ?? data.city ?? "N/A";
(我说“几乎完全等同”是因为它也会返回值 null
,而不仅仅是 undefined
。)
这里的措辞有点尴尬,但我知道有一个聪明的方法可以解决这个问题。我正在请求来自 JSON 对象的数据。此 JSON 对象将具有“城市”、“城镇”或“语言环境”。它只会有一个。我有一些冗长的分层 'if undefined' 检查,它们只是相互堆叠,直到找到正确的检查,但我想使用运算符一定有更好的方法。这段代码有效,我只是相信它应该做得更好。这是一个例子:
var town = response.data["locale"];
if(town === undefined){
town = response.data["town"];
if(town === undefined){
town = response.data["city"];
if(town === undefined){
town = "N/A";
}
}
}
如您所见,我只想将我的变量分配给任何一个存在的变量。我发现这个嵌套的“if 语句”完全是个碍眼的东西。也许我的问题可以帮助将来的人们编写更清晰的代码。我不太擅长运算符,但这种情况似乎不需要使用任何三元运算符。
例如,您可以在定义变量时使用 or (||
) 运算符。它检查第一个是否未定义,如果是,它将尝试使用第二个,依此类推
在你的情况下,你可以将它替换为这一行。
let town = response.data["locale"] || response.data["town"] || response.data["city"] || "N/A";
您用 node.js, so I’ll assume you’re using Node.js and have modern JavaScript available. The nullish coalescing operator ??
标记的问题几乎完全相同:
let town = response.data.locale ?? response.data.town ?? response.data.city ?? "N/A";
您也可以避免重复 response
:
let {data} = response;
let town = data.locale ?? data.town ?? data.city ?? "N/A";
(我说“几乎完全等同”是因为它也会返回值 null
,而不仅仅是 undefined
。)