如何从Google Maps API的字符串数组中提取整数?附行程时长示例
从Google Maps API时长字符串中提取整数的解决方案
嘿,我懂你现在的需求——从Google Maps API返回的像"34 min"这种行程时长字符串里抠出整数部分,对吧?结合你贴的代码片段,我给你几个实用的解决办法:
方法1:用正则表达式提取(最稳健)
正则表达式能精准匹配字符串里的数字部分,不管后面的单位是"min"、"hour"甚至其他格式,都能生效。
在你的循环里,拿到API返回的时长字符串后,这么处理:
// 从API获取时长文本,比如"34 min" const durationText = results[j].duration.text; // 匹配所有数字字符,转成整数 const durationNum = parseInt(durationText.match(/\d+/)[0], 10);
简单解释下:/\d+/是匹配一个或多个数字的正则,match()会返回匹配到的数组,取第一个元素就是纯数字字符串,再用parseInt()转成整数(第二个参数10是指定十进制,避免意外解析成八进制)。
把这个逻辑整合到你的现有代码里,大概是这样:
for (var i = 0; i < originList.length; i++) { var results = response.rows[i].elements; geocoder.geocode({ 'address': originList[i] }, showGeocodedAddressOnMap(false)); for (var j = 0; j < results.length; j++) { geocoder.geocode({ 'address': destinationList[j] }, showGeocodedAddressOnMap(true)); // 提取时长数字 const durationText = results[j].duration.text; const durationMinutes = parseInt(durationText.match(/\d+/)[0], 10); // 更新输出内容 outputDiv.innerHTML += originList[i] + ' to ' + destinationList[j] + ': ' + durationText + '(提取的数字:' + durationMinutes + ')<br>'; } }
方法2:拆分字符串取第一部分(简单但有局限)
如果能确定API返回的格式永远是「数字 + 空格 + 单位」,也可以用split()拆分字符串,直接取第一部分转成整数:
const durationText = results[j].duration.text; const durationNum = parseInt(durationText.split(' ')[0], 10);
这个方法更简洁,但要注意:如果API返回的格式发生变化(比如没有空格、数字位置改变),这个方法就会失效,所以不如正则表达式稳健。
额外推荐:直接用API的数值型时长(最靠谱)
其实Google Maps Distance Matrix API还提供了duration.value字段,它是以秒为单位的整数值,完全不需要处理字符串,直接用这个字段更准确:
// 获取秒数,转成分钟就除以60取整 const durationSeconds = results[j].duration.value; const durationMinutes = Math.floor(durationSeconds / 60);
这个方法是我最推荐的,因为它避开了字符串解析的所有潜在问题,直接用API给出的结构化数据,可靠性拉满。
内容的提问来源于stack exchange,提问作者matthausen
相关产品推荐
相关产品推荐

