You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Google Places JS客户端库返回NaN,硬编码API URL结果正常?

解决Google Places JavaScript Library返回NaN评分的问题

首先可以明确:Google Places JavaScript客户端库和REST API的查询能力是一致的,你遇到的NaN问题几乎肯定是代码中未处理「部分地点没有用户评分」的情况导致的。

问题根源分析

你的回调函数gymCallback中直接累加place.rating,但注意:并不是所有Google Places数据库中的地点都有用户提交的评分——当某个地点没有评分时,place.rating属性会是undefined。把undefined和数字相加,totalRating会直接变成NaN,后续的平均值计算自然也会得到NaN。

而你直接访问REST API的XML结果时,可能只关注了有评分的条目,忽略了那些没有<rating>标签的地点;或者刚好那次请求返回的所有健身房都有评分,所以没发现这个问题。

修复代码

修改你的回调函数,只累加存在rating属性的地点评分,同时统计有效评分的数量(而不是直接用结果集的总长度):

function gymCallback(results2, status2){
    // 先检查请求状态是否成功
    if (status2 !== google.maps.places.PlacesServiceStatus.OK) {
        console.error('获取健身房数据失败:', status2);
        document.getElementById('gymAvgRating').value = '0.0';
        return;
    }

    var totalRating = 0;
    var ratedPlaceCount = 0;

    results2.forEach( function( place ) {
        // 只处理有rating属性的地点
        if (place.rating !== undefined) {
            totalRating += place.rating;
            ratedPlaceCount++;
        }
    });

    // 计算平均评分:如果没有有评分的地点,返回0.0
    var averageRating = ratedPlaceCount === 0 ? 0 : totalRating / ratedPlaceCount;
    var averageRatingRounded = averageRating.toFixed(1);
    
    var averageGymRatingTB = document.getElementById('gymAvgRating');
    averageGymRatingTB.value = averageRatingRounded;
}

额外排查建议

  • 在回调函数开头添加console.log(results2),查看返回的每个place对象的具体属性,确认哪些地点没有rating字段,这能帮你更直观地理解问题。
  • 注意nearbySearch的结果数量是有限制的(默认最多返回20条),如果某个区域的目标设施大多没有评分,就会出现你看到的NaN情况;而另一个区域可能刚好有评分的设施占比高,所以能得到正常结果。

内容的提问来源于stack exchange,提问作者user9269133

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:41:43