Javascript Slice()未按预期工作
嗯,我到处都查过了,但还是没能剪掉。。。从我的谷歌地图网站,这是可行的,但我的努力“切片”变量“点”没有 这不起作用-未捕获类型错误:point.slice不是函数Javascript Slice()未按预期工作,javascript,Javascript,嗯,我到处都查过了,但还是没能剪掉。。。从我的谷歌地图网站,这是可行的,但我的努力“切片”变量“点”没有 这不起作用-未捕获类型错误:point.slice不是函数 示例: point = point.slice(1, -1); +point+ (print out the result) var str; str = point; str = str.slice(1, -1); +str+ (print out the result) 这不起作用-未捕获类型错误:str.
示例:
point = point.slice(1, -1);
+point+ (print out the result)
var str;
str = point;
str = str.slice(1, -1);
+str+ (print out the result)
这不起作用-未捕获类型错误:str.slice不是函数
示例: 这确实有效:
var str;
str = "(28.7035649, -105.9697253)";
str = str.slice(1, -1);
+str+ (print out the result)
打印出的28.7035649,-105.9697253正确-无括号
这里有什么线索吗?第一个示例中的返回值是一个
对象
,并且对象没有定义切片
方法,但定义了字符串,这就是最后一个示例工作的原因
在第二个示例中,您将相同的点
对象指定给未转换为字符串的str
变量。LatLng类具有lat()
和lng()
方法,您可以使用这些方法来获取这些值:
var lat = point.lat();
var lng = point.lng();
请参阅。如其他答案中所述,切片是字符串的方法,您可以在对象上使用它。您可以做什么:
point.toString().slice(1, -1);
见文件
编辑:
请注意,point.toString()
不会更改实际的point
变量,它返回一个表示该点的字符串,以便您可以将其分配给新变量,例如var pointString=point.toString()
pointString.slice(1,-1)
或point.toString().slice(1,-1)
也会发生同样的情况,您需要一个变量来保存该数据,例如var myPoint=point.toString().slice(1,-1)
。您也可以重用point
变量,如point=point.toString().slice(1,-1)
,但您失去了对原始point对象的引用。问题是您试图访问LatLng对象的不存在方法。另请注意,这是一个重复的问题
很快使用下面的解决方案来字符串化LatLng对象(来源:上面的链接),并将slice
方法应用于下面函数的结果
function formatData(data) {
//data is an array of many LatLng objects
newData = [];
for(var i = 0; i < data.length; i++) {
var obj = new Object();
obj['lat'] = data[i].lat();
obj['lon'] = data[i].lng();
newData.push(obj);
}
return JSON.stringify(newData);
}
函数格式数据(数据){
//数据是由许多LatLng对象组成的数组
新数据=[];
对于(变量i=0;i
我的问题“Slice()未按预期工作”已经得到了回答,关于谷歌地图的其他问题将需要一个新问题
为了明确答案,madox2虽然语法正确,但不适用于谷歌地图“点””:
point.toString()切片(1,-1)强>
打印出点,括号仍然存在
以下方法确实有效:
var str;
str = "(28.7035649, -105.9697253)";
str = str.slice(1, -1);
+str+ (print out the result)
var newpoint=point.toString().slice(1,-1)强>
打印出newpoint,括号就不见了
我还没有收到关于原因的解释,但我感谢大家的回答。(回到PHP-一切都可以原谅!)我想说对象不支持slice函数,因为slice是用于字符串的
slice()
是javascriptstring
或array
的一种方法,但是你有google.maps.LatLng
object这给了流浪狗一个解决方案,但你的答案应该是为什么它是正确的解决方案。几乎正确,但正如恩科德所说,我“还不理解它”。。。point.toString()切片(1,-1);在我的环境中不去掉括号,但var NEWPOINT=point.toString().slice(1,-1);做我可以正确打印值21.1210537,-101.6823321,但是(图像)大小=100x62,位置=新点&航向=新航向&螺距=0;确实产生了一个缩略图,但它是一个未知的位置,所以我仍然感到困惑,除非结果与谷歌的API有关。(NEWHEADING也适用于pitch)感谢Gothdo的评论和建议,您的代码确实提供了lat,lng,但是在谷歌街景API中使用它不会产生结果(“我们没有该位置的图像”)(图像)大小=100x62,位置=lat,lng&heading=heading&pitch=0;使用上面的slice()方法确实会生成街景位置缩略图,但我不知道该位置。这在php中工作,并显示正确的街景缩略图-但不是在javascript中,这正是我在这里试图实现的。我想我可以在我的javascript中嵌入php,但这给我的印象是糟糕的做法和不必要的。谢谢你,安德烈,但我并没有尝试“字符串化”,我只是尝试从“point”变量中删除括号-而这可能涉及到将变量临时转换为字符串以执行操作是真的,但您的代码示例(恕我直言)与此无关。@谢谢您的评论,我会在有时间时更新代码