所以,我正在使用Google Places API对地址进行地理编码。有38种Google地址组件类型,我们有大约5种内部地址组件类型,因此我需要一个系统,将多种Google类型映射到我们的内部类型,并带有后备。
例如:
var neighbourhood = googleResponse.neighborhood || googleResponse.sublocality_level_2 || googleResponse.sublocality_level_1
最好/最干净/最有效的方法是什么?基本上,我需要为一些返回值赋值var,除非返回值未定义,然后向下移动链。
答案 0 :(得分:1)
我认为你的方法很合理 - 使用短路OR比我给某些分支声明感觉要干净得多。我的两条建议是:
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 "";
}
}