javascript push, затем сортировать массив [дубликат]

Добавить маркер в вашу программу очень просто. Вы можете добавить этот код:

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
    


    

Обычно вы должны иметь этот результат:

155
задан Jérôme Verstrynge 25 January 2012 в 03:52
поделиться

13 ответов

В (почти :) однострочный

["Foo", "bar"].sort(function (a, b) {
    return a.toLowerCase().localeCompare(b.toLowerCase());
});

, который приводит к

[ 'bar', 'Foo' ]

. Хотя

["Foo", "bar"].sort();

приводит к

[ 'Foo', 'bar' ]
294
ответ дан Ivan Krechetov 28 August 2018 в 03:51
поделиться

Если вы хотите гарантировать тот же порядок, независимо от порядка элементов во входном массиве, здесь стабильная сортировка:

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;
});
10
ответ дан Aalex Gabi 28 August 2018 в 03:51
поделиться

Вы также можете использовать оператор 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).

3
ответ дан AndyS 28 August 2018 в 03:51
поделиться
arr.sort(function(a,b) {
    a = a.toLowerCase();
    b = b.toLowerCase();
    if (a == b) return 0;
    if (a > b) return 1;
    return -1;
});
22
ответ дан Devin G Rhode 28 August 2018 в 03:51
поделиться
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;
        }
    }
}
0
ответ дан Envy 28 August 2018 в 03:51
поделиться

Это может помочь, если вы пытаетесь понять:

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.
***/

http://jsfiddle.net/ianjamieson/wmxn2ram/1/

0
ответ дан Ian Jamieson 28 August 2018 в 03:51
поделиться

Я завернул верхний ответ в 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());
        });
    };
}
1
ответ дан Jason 28 August 2018 в 03:51
поделиться

Другие ответы предполагают, что массив содержит строки. Мой метод лучше, потому что он будет работать, даже если массив содержит 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 будет всегда отсортировано последним.

2
ответ дан John Henckel 28 August 2018 в 03:51
поделиться

Вы также можете использовать новый Intl.Collator().compare , для каждого MDN он более эффективен при сортировке массивов. Недостатком является то, что он не поддерживается старыми браузерами. MDN заявляет, что он вообще не поддерживается в Safari. Необходимо проверить его, поскольку он утверждает, что поддерживается Intl.Collator .

При сравнении большого количества строк, например при сортировке больших массивов, лучше создать объект Intl.Collator и использовать функцию, предоставленную свойством сравнения

["Foo", "bar"].sort(Intl.Collator().compare); //["bar", "Foo"]
5
ответ дан mateuscb 28 August 2018 в 03:51
поделиться
myArray.sort(
  function(a, b) {
    if (a.toLowerCase() < b.toLowerCase()) return -1;
    if (a.toLowerCase() > b.toLowerCase()) return 1;
    return 0;
  }
);

EDIT: Обратите внимание, что я изначально написал это, чтобы проиллюстрировать эту технику, а не иметь представление о производительности. Пожалуйста, также обратитесь к ответу @Ivan Krechetov для более компактного решения.

56
ответ дан ron tornambe 28 August 2018 в 03:51
поделиться

Нормализовать регистр в .sort() с помощью .toLowerCase().

4
ответ дан user 28 August 2018 в 03:51
поделиться

Оберните свои строки в / /i. Это простой способ использовать регулярное выражение для игнорирования обсадной колонны

0
ответ дан user3225968 28 August 2018 в 03:51
поделиться

Пришло время пересмотреть этот старый вопрос.

Вы не должны использовать решения, полагающиеся на toLowerCase. Они неэффективны и просто не работают на некоторых языках (например, в Турции). Предпочитаете это:

['Foo', 'bar'].sort((a, b) => a.localeCompare(b, undefined, {sensitivity: 'base'}))

Проверьте документацию на совместимость браузера и все, что нужно знать о опции sensitivity.

10
ответ дан ZunTzu 28 August 2018 в 03:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: