在 Javascript 中使用子字符串创建一个对象



好的,所以,这个想法是创建一个对象,其中包含来自谷歌地图网址的纬度、经度和缩放级别数据,非常简单:

function getMapData(url)
{
let rawData = url.substr(url.search('@') +1, url.search('z')).split(',');
const [lat,  lng,  zoom] = rawData;
return {lat, lng, zoom};
}

现在,根据我有限的理解,这应该提取从@到第一个z的所有内容,但我得到了这样的对象:

网址示例:https//www.google.com.ar/maps/place/Central+Park/@40.7828647,-73.9675491,17z/data=!3m1!4b1!4m5!3m4!1s0x89c2589a018531e3:0xb9df1f7387a94119!8m2!3d40.7828647!4d-73.9653551?hl=en

创建的对象:

{
lat: 40.7828647,
lng: -73.9675491,
zoom: 17z/data=!3m1!4b1!4m5!3m4!1s0x89c2589a018531e3:0xb9df
}

所以我的问题是:为什么缩放值是这样的,为什么不停在字母z上?

小提琴:https://jsfiddle.net/1yt5qnwf/4/

如果您检查文档,substr 期望:

str.substr(start[, length])

你真正想要的是子字符串,它期望:

str.substring(indexStart[, indexEnd])

这是工作解决方案:

let rawData = url.substr(url.search('@') +1, url.search("z")-url.search("@")-1).split(',');

只看@和z位置有点危险,因为它们可以在之前找到(特别是对于Z可以在地名中(。这是一个正则表达式的解决方案,它的风险较小。

var url = 'https//www.google.com.ar/maps/place/Central+Park/@40.7828647,-73.9675491,17z/data=!3m1!4b1!4m5!3m4!1s0x89c2589a018531e3:0xb9df1f7387a94119!8m2!3d40.7828647!4d-73.9653551?hl=en' ;
var regexp = /@([0-9-.]+),([0-9-.]+),([0-9]+)z/g ;
var match = regexp.exec(url) ;
console.log(match) // ["@40.7828647,-73.9675491,17z","40.7828647","-73.9675491","17"]
if ( match.length == 4 )
{
match.shift() ;
console.log(match) ; // ["40.7828647","-73.9675491","17"]
}

相关内容

  • 没有找到相关文章

最新更新