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";

您用 , 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。)