Добавить маркер в вашу программу очень просто. Вы можете добавить этот код:
var marker = new google.maps.Marker({
position: myLatLng,
map: map,
title: 'Hello World!'
});
Следующие поля особенно важны и обычно устанавливаются при создании маркера:
position
(обязательно ) определяет LatLng, определяющий начальное местоположение маркера. Один из способов получения LatLng - использование службы геокодирования . map
(необязательно) указывает карту, по которой нужно поместить маркер. Если вы не укажете карту при построении маркера, маркер будет создан, но не будет привязан к карте (или отображен). Вы можете добавить маркер позже, вызвав метод setMap()
маркера. Обратите внимание: в этом примере поле заголовка задает заголовок маркера, который будет отображаться как всплывающая подсказка.
Здесь вы можете ознакомиться с Google api documenation здесь .
Это полный пример установки маркера one на карте. Будьте внимательны, вам нужно заменить YOUR_API_KEY
на ваш ключ API google :
Simple markers
Теперь, если вы хотите вы должны сделать вот так:
var locations = [
['Bondi Beach', -33.890542, 151.274856, 4],
['Coogee Beach', -33.923036, 151.259052, 5],
['Cronulla Beach', -34.028249, 151.157507, 3],
['Manly Beach', -33.80010128657071, 151.28747820854187, 2],
['Maroubra Beach', -33.950198, 151.259302, 1]
];
function initMap() {
var myLatLng = {lat: -33.90, lng: 151.16};
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 10,
center: myLatLng
});
var count;
for (count = 0; count < locations.length; count++) {
new google.maps.Marker({
position: new google.maps.LatLng(locations[count][1], locations[count][2]),
map: map,
title: locations[count][0]
});
}
}
В этом примере дайте мне следующий результат:
Вы также можете добавить инфо-окно в свой вывод. Вам просто нужен этот код:
var marker = new google.maps.Marker({
position: new google.maps.LatLng(locations[count][1], locations[count][2]),
map: map
});
marker.info = new google.maps.InfoWindow({
content: 'Hello World!'
});
Здесь вы можете найти документацию Google о infoWindows здесь .
Теперь мы можем открыть инфо-окно когда маркер «clik» выглядит следующим образом:
var marker = new google.maps.Marker({
position: new google.maps.LatLng(locations[count][1], locations[count][2]),
map: map
});
marker.info = new google.maps.InfoWindow({
content: locations [count][0]
});
google.maps.event.addListener(marker, 'click', function() {
// this = marker
var marker_map = this.getMap();
this.info.open(marker_map, this);
// Note: If you call open() without passing a marker, the InfoWindow will use the position specified upon construction through the InfoWindowOptions object literal.
});
Обратите внимание, что вы можете иметь документацию о Listener
здесь в разработчике Google.
И, наконец, мы можем построить infoWindow в маркере, если пользователь нажмет на него. Это мой полный код:
Info windows
Обычно вы должны иметь этот результат:
В (почти :) однострочный
["Foo", "bar"].sort(function (a, b) {
return a.toLowerCase().localeCompare(b.toLowerCase());
});
, который приводит к
[ 'bar', 'Foo' ]
. Хотя
["Foo", "bar"].sort();
приводит к
[ 'Foo', 'bar' ]
Если вы хотите гарантировать тот же порядок, независимо от порядка элементов во входном массиве, здесь стабильная сортировка:
myArray.sort(function(a, b) {
/* Storing case insensitive comparison */
var comparison = a.toLowerCase().localeCompare(b.toLowerCase());
/* If strings are equal in case insensitive comparison */
if (comparison === 0) {
/* Return case sensitive comparison instead */
return a.localeCompare(b);
}
/* Otherwise return result */
return comparison;
});
Вы также можете использовать оператор Elvis:
arr = ['Bob', 'charley', 'fudge', 'Fudge', 'biscuit'];
arr.sort(function(s1, s2){
var l=s1.toLowerCase(), m=s2.toLowerCase();
return l===m?0:l>m?1:-1;
});
console.log(arr);
Дает:
biscuit,Bob,charley,fudge,Fudge
Метод localeCompare, вероятно, хорош, хотя ...
Примечание. Оператор Элвиса - это «тройной оператор» короткой формы, если тогда другое, обычно с назначением. Если вы смотрите на?: боком, это похоже на Элвиса ... т.е. вместо:
if (y) {
x = 1;
} else {
x = 2;
}
вы можете использовать:
x = y?1:2;
т.е. когда y истинно, тогда верните 1 (для присвоения x), в противном случае верните 2 (для присвоения x).
arr.sort(function(a,b) {
a = a.toLowerCase();
b = b.toLowerCase();
if (a == b) return 0;
if (a > b) return 1;
return -1;
});
arr.sort(function(a,b) {
a = a.toLowerCase();
b = b.toLowerCase();
if( a == b) return 0;
if( a > b) return 1;
return -1;
});
В вышеприведенной функции, если мы просто сравним, когда нижний регистр имеет два значения a и b, у нас не будет симпатичного результата.
Пример, если массив равен [A, a, B, b, c, C, D, d, e, E], и мы используем указанную выше функцию, мы имеем именно этот массив. Это ничего не изменило.
Чтобы получить результат [A, a, B, b, C, c, D, d, E, e], мы должны сравнить снова, когда два значения нижнего регистра равны :
function caseInsensitiveComparator(valueA, valueB) {
var valueALowerCase = valueA.toLowerCase();
var valueBLowerCase = valueB.toLowerCase();
if (valueALowerCase < valueBLowerCase) {
return -1;
} else if (valueALowerCase > valueBLowerCase) {
return 1;
} else { //valueALowerCase === valueBLowerCase
if (valueA < valueB) {
return -1;
} else if (valueA > valueB) {
return 1;
} else {
return 0;
}
}
}
Это может помочь, если вы пытаетесь понять:
var array = ["sort", "Me", "alphabetically", "But", "Ignore", "case"];
console.log('Unordered array ---', array, '------------');
array.sort(function(a,b) {
a = a.toLowerCase();
b = b.toLowerCase();
console.log("Compare '" + a + "' and '" + b + "'");
if( a == b) {
console.log('Comparison result, 0 --- leave as is ');
return 0;
}
if( a > b) {
console.log('Comparison result, 1 --- move '+b+' to before '+a+' ');
return 1;
}
console.log('Comparison result, -1 --- move '+a+' to before '+b+' ');
return -1;
});
console.log('Ordered array ---', array, '------------');
// return logic
/***
If compareFunction(a, b) is less than 0, sort a to a lower index than b, i.e. a comes first.
If compareFunction(a, b) returns 0, leave a and b unchanged with respect to each other, but sorted with respect to all different elements. Note: the ECMAscript standard does not guarantee this behaviour, and thus not all browsers (e.g. Mozilla versions dating back to at least 2003) respect this.
If compareFunction(a, b) is greater than 0, sort b to a lower index than a.
***/
Я завернул верхний ответ в polyfill, поэтому я могу вызвать .sortIgnoreCase () в строковых массивах
// Array.sortIgnoreCase() polyfill
if (!Array.prototype.sortIgnoreCase) {
Array.prototype.sortIgnoreCase = function () {
return this.sort(function (a, b) {
return a.toLowerCase().localeCompare(b.toLowerCase());
});
};
}
Другие ответы предполагают, что массив содержит строки. Мой метод лучше, потому что он будет работать, даже если массив содержит null, undefined или другие нестрочные.
var notdefined;
var myarray = ['a', 'c', null, notdefined, 'nulk', 'BYE', 'nulm'];
myarray.sort(ignoreCase);
alert(JSON.stringify(myarray)); // show the result
function ignoreCase(a,b) {
return (''+a).toUpperCase() < (''+b).toUpperCase() ? -1 : 1;
}
null
будет сортироваться между «nulk» и «nulm». Но undefined
будет всегда отсортировано последним.
Вы также можете использовать новый Intl.Collator().compare
, для каждого MDN он более эффективен при сортировке массивов. Недостатком является то, что он не поддерживается старыми браузерами. MDN заявляет, что он вообще не поддерживается в Safari. Необходимо проверить его, поскольку он утверждает, что поддерживается Intl.Collator
.
При сравнении большого количества строк, например при сортировке больших массивов, лучше создать объект Intl.Collator и использовать функцию, предоставленную свойством сравнения
blockquote >["Foo", "bar"].sort(Intl.Collator().compare); //["bar", "Foo"]
myArray.sort(
function(a, b) {
if (a.toLowerCase() < b.toLowerCase()) return -1;
if (a.toLowerCase() > b.toLowerCase()) return 1;
return 0;
}
);
EDIT: Обратите внимание, что я изначально написал это, чтобы проиллюстрировать эту технику, а не иметь представление о производительности. Пожалуйста, также обратитесь к ответу @Ivan Krechetov для более компактного решения.
Нормализовать регистр в .sort()
с помощью .toLowerCase()
.
Оберните свои строки в / /i
. Это простой способ использовать регулярное выражение для игнорирования обсадной колонны
Пришло время пересмотреть этот старый вопрос.
Вы не должны использовать решения, полагающиеся на toLowerCase
. Они неэффективны и просто не работают на некоторых языках (например, в Турции). Предпочитаете это:
['Foo', 'bar'].sort((a, b) => a.localeCompare(b, undefined, {sensitivity: 'base'}))
Проверьте документацию на совместимость браузера и все, что нужно знать о опции sensitivity
.