Хм, я проверял везде, но все еще не смог вырезать его ... с моего сайта Google Maps, который работает, но мои попытки "разрезать" переменную "точку" не дают.

 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)

Это не работает - Uncaught TypeError: str.slice не является функцией.


< Сильный > Пример: Это работает:

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

Это выдает 28.7035649, -105.9697253 , что правильно - без скобок.

Есть какие-то подсказки, что здесь происходит?

-3
Stray Dog 18 Дек 2015 в 10:24

5 ответов

Лучший ответ

На мой вопрос "Slice () не работает должным образом" был получен ответ, и для других вопросов, касающихся Google Maps, потребуется новый вопрос.

Чтобы уточнить ответ madox2 при правильном синтаксисе, он не работает с Google Maps " point ":

point.toString (). slice (1, -1); Распечатайте точку и скобки все еще там!

Следующее действительно работает:

var newpoint = point.toString (). slice (1, -1); Распечатайте newpoint и скобки исчезли!

Я не получил объяснения ПОЧЕМУ, но тем не менее я благодарю вас всех за ваши ответы. (Вернись PHP - все прощено!)

-1
Stray Dog 21 Дек 2015 в 02:43

Проблема в том, что вы пытаетесь получить доступ к несуществующему методу для объекта LatLng. Также примечание , это дублирующий вопрос Как я могу преобразовать в строку? объект Google 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);     
}
0
Community 23 Май 2017 в 12:07

Как упоминалось в других ответах, slice - это метод строки, и вы используете его на объекте. Что ты можешь сделать:

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

См. документы класс LatLng.

РЕДАКТИРОВАТЬ:

Обратите внимание, что point.toString() не изменяет фактическую переменную point, она возвращает строку, которая представляет точку, так что вы можете назначить ее новой переменной, например, {{Х2}} .

То же самое происходит с pointString.slice(1, -1) или point.toString().slice(1, -1), вам нужна переменная для хранения этих данных, например {{Х2}} . Вы также можете повторно использовать переменную point, например point = point.toString().slice(1, -1), но потеряете ссылку на исходный точечный объект.

0
madox2 21 Дек 2015 в 10:22

Класс LatLng имеет методы lat() и lng(), которые можно использовать для получения следующих значений:

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

См. документы.

0
Michał Perłakowski 18 Дек 2015 в 07:30

Возвращаемое значение в вашем первом примере - object, и у объектов не определен метод slice, но есть строки, поэтому последний пример работает.

Во втором примере вы присваиваете тот же объект point переменной str, которая не преобразуется в строку.

3
Venugopal 18 Дек 2015 в 07:28