Slice()无法按预期工作

时间:2015-12-18 07:24:35

标签: javascript

嗯,我已经到处检查了但仍然没有能够切断它...从我的谷歌地图网站开始工作,但是我努力去切片"变量" point"不要。

 for (var i = 0; i < markers.length; i++) {
    var point = new google.maps.LatLng(
    parseFloat(markers[i].getAttribute("lat")),
    parseFloat(markers[i].getAttribute("lng")));

示例:      +点+(打印出结果)

打印出(28.7035649,-105.9697253),这是正确的。

所以,我想用slice()

去除括号

示例:

 point = point.slice(1, -1);

 +point+ (print out the result)

这不起作用 - Uncaught TypeError:point.slice不是函数。

示例:

 var str;
 str =  point;
 str = str.slice(1, -1);
 +str+ (print out the result)

这不起作用 - 未捕获TypeError:str.slice不是函数。

示例: 这确实有效:

 var str;
 str = "(28.7035649, -105.9697253)";
 str = str.slice(1, -1);
 +str+ (print out the result)

打印出 28.7035649,-105.9697253 这是正确的 - 没有括号。

这里发生了什么的线索?

4 个答案:

答案 0 :(得分:3)

第一个示例中的

返回值是object,对象没有定义slice方法但字符串确实是最后一个示例的原因。

在第二个示例中,您将相同的point对象分配给str变量,该变量不会转换为字符串。

答案 1 :(得分:0)

LatLng类有lat()lng()方法,可用于获取这些值:

var lat = point.lat();
var lng = point.lng();

请参阅docs

答案 2 :(得分:0)

正如其他答案所述,slice是字符串的方法,你在对象上使用它。你能做什么:

point.toString().slice(1, -1);

请参阅文档LatLng class

编辑:

请注意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),但是您忽略了对原始点对象的引用。

答案 3 :(得分:0)

问题是您正在尝试访问LatLng对象不存在的方法。同样注意这是重复的问题How do I stringify a google LatLng object?

很快使用下面的解决方案来对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);     
}