Проблема Google Maps: закрытия и передача ссылкой

Вы можете использовать filter и some вот так

[1115 ]
const toto = [{a:1,b:2,c:1},{a:7,c:2,d:1}]
const titi = [{a:2,b:2,c:1},{a:1,c:2,d:1}]

function differenceBy(array1, array2, key) {
  return array1.filter(a => !array2.some(b => b[key] === a[key]))
}

console.log(differenceBy(toto, titi, "a"))

Возвращает все элементы в array1, которых нет в array2:

{
    "a": 7,
    "c": 2,
    "d": 1
}

5
задан Lee Theobald 6 May 2009 в 12:37
поделиться

2 ответа

Измените это:

google.maps.Event.addListener(marker, infoAction, function() {
      alert(marker.value);
      map.openInfoWindowHtml(point, getResultInfoContent(marker.value));
    });

на следующее:

google.maps.Event.addListener(marker, infoAction, (function(marker, point, map) { return function() {
      alert(marker.value);
      map.openInfoWindowHtml(point, getResultInfoContent(marker.value));
    }})(marker, point, map));

Это создаст замыкание, которое вы хотите.

Для ясности выделите:

var f = function(marker, point, map)
{
    return function()
    {
        alert(marker.value);
        map.openInfoWindowHtml(point, getResultInfoContent(marker.value));
    }
}

google.maps.Event.addListener(marker, infoAction, f(marker, point, map));
6
ответ дан 14 December 2019 в 01:16
поделиться

Однако приведенный выше ответ не очень интуитивно понятен - как сказал Грег.

Когда вы добавляете событие к объекту, этот объект передается вниз, так что вы можете получить к нему доступ с помощью «this» внутри закрытие. Если бы вы заменили "marker.value" на "this.value", ваша проблема была бы решена. Если вам нужно передать больше материала, вы привязываете его к объекту и передаете его:

marker.a = 1
marker.b = 2
marker.c = 3

Внутри замыкания this.a будет 1 и так далее ..

3
ответ дан 14 December 2019 в 01:16
поделиться
Другие вопросы по тегам:

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