Вы можете использовать filter
и some
вот так
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
}
Измените это:
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));
Однако приведенный выше ответ не очень интуитивно понятен - как сказал Грег.
Когда вы добавляете событие к объекту, этот объект передается вниз, так что вы можете получить к нему доступ с помощью «this» внутри закрытие. Если бы вы заменили "marker.value" на "this.value", ваша проблема была бы решена. Если вам нужно передать больше материала, вы привязываете его к объекту и передаете его:
marker.a = 1
marker.b = 2
marker.c = 3
Внутри замыкания this.a будет 1 и так далее ..