javascript - 设置后备链的最简洁方法?

标签 javascript google-maps google-maps-api-3 maps street-address

因此,我对来自 Google Places API 的地址进行地理编码。 Google 地址组件类型有 38 种,我们有大约 5 种内部地址组件类型,因此我需要一个系统,将许多 Google 类型映射到我们的内部类型,并提供后备。

例如:

var neighbourhood = googleResponse.neighborhood || googleResponse.sublocality_level_2 || googleResponse.sublocality_level_1

最好/最干净/最有效的方法是什么?基本上,我需要将 var 分配给某个返回值,除非该返回值未定义,然后沿着链向下移动。

最佳答案

我认为你的方法是合理的 - 使用短路 OR 感觉比使用某种分支语句要干净得多。我的两个建议是:

  • 您可能应该添加某种硬编码值(也许是空字符串?取决于您的用例)作为最终后备,这样,如果未找到所有选项,您就不会结束变量被设置为意想不到的东西。我认为 100% 明确所有可能返回的东西始终是一个很好的做法。
  • 我建议将该逻辑提取到一个函数中,这样如果您想在其他地方重用它,它将更易于维护。即使您认为不需要再次使用它,万一您以后改变主意,仍然值得这样做 - 必须遍历并替换一段代码的每个实例是非常乏味的!它还使您的代码更容易测试 - 您可以传入硬编码的 googleResponse 并检查输出是否符合您的预期。

所以我的方法可能看起来像这样:

function getNeighborhood(googleResponse) {
    return googleResponse.neighborhood
        || googleResponse.sublocality_level_2
        || googleResponse.sublocality_level_1
        || "";
}

var neighborhood = getNeighborhood(googleResponse);

编辑:

为了回应您的评论,我可以想到一些对于必须连接的值的选项。

如果这只是一个“要么全有,要么全无”的问题,你可以用三元表达式非常优雅地编写它:

function getStreet(googleResponse) {
    return googleResponse.street_number && googleResponse.route
        ? googleResponse.street_number + googleResponse.route
        : "";
}

但是,如果您开始尝试使用后备来嵌套这些内容,它很快就会变得非常难以阅读。在这一点上,你最好只依靠 if/else if/else - 这有点啰嗦,但它是可以理解的,在我看来这更重要。

function getStreet(googleResponse) {
    if (googleResponse.street_number && googleResponse.route) {
        return googleResponse.street_number + googleResponse.route;
    }
    else if (/* fallback */) {
        return /* concat here */;
    }
    else {
        // Make sure to always return a value, even if all of
        // the other fallbacks fail!
        return "";
    }
}

关于javascript - 设置后备链的最简洁方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37386937/

相关文章:

jquery - 如何使谷歌地图中的标记图像闪烁

google-maps - 如何在 Google Place URL 中获取 cid?

Android:谷歌地图 - 始终在 map 加载时显示 map 工具栏

php - Google map 不会显示点 - XML 为空

javascript - 是否可以为一个位置创建两个标记?

Javascript::使用 querySelector 选择兄弟对象

javascript - 使用一个文件显示到很多网页

javascript - 警报最高数字

javascript - 如何清除 map 上当前的标记

javascript - jquery按类型和类获取html元素