Ich habe ein Code-Snippet, das ein Array clusterUniqueMarkers
erstellt, das alle eindeutigen Objekte im Array clusterMarkers
speichert.Array-Größe explodiert
Problem: Mit Hilfe von console.log(clusterUniqueMarkers.length);
kann ich sehen, dass die Größe des Arrays explodiert! Wenn der Code ausgeführt wird, schießt der Browser CPU & Speicherverbrauch hoch und stürzt ab. Was könnte das Problem verursacht haben?
JS-Code
// MarkerClusterer click handler
google.maps.event.addListenerOnce(mc, "clusterclick", function (cluster) {
// Find number of unique LatLng in clusters
var clusterMarkers = mc.getMarkers();
var clusterUniqueMarkers = [];
for(var j = 0; j < clusterMarkers.length; j++) {
if(clusterUniqueMarkers.length == 0){
// Adding first unique marker
clusterUniqueMarker = new Object();
clusterUniqueMarker.lat = mc.getMarkers()[j].position.lat();
clusterUniqueMarker.lng = mc.getMarkers()[j].position.lng();
clusterUniqueMarkers.push(clusterUniqueMarker);
} else {
// At least 1 unique marker
var clusterUniqueMarkersLength = clusterUniqueMarkers.length; // prevent infinite loop when clusterUniqueMarkers.length keeps increasing
console.log(clusterUniqueMarkers.length);
console.log(clusterUniqueMarkersLength);
console.log('j: ' + j);
for(var k = 0; k < clusterUniqueMarkersLength; k++) {
// If marker is unique
if(clusterUniqueMarkers[k].lat != mc.getMarkers()[j].position.lat() && clusterUniqueMarkers[k].lng != mc.getMarkers()[j].position.lat()) {
clusterUniqueMarker = new Object();
clusterUniqueMarker.lat = mc.getMarkers()[j].position.lat();
clusterUniqueMarker.lng = mc.getMarkers()[j].position.lng();
clusterUniqueMarkers.push(clusterUniqueMarker);
}
}
}
}
console.log(clusterMarkers);
console.log(clusterUniqueMarkers);
});
Ihre Logik ist falsch. Sie durchlaufen alle Elemente in cluoderMarkers und sagen: Wenn die eindeutige Liste leer ist, fügen Sie das aktuelle Element als ein eindeutiges hinzu. Wenn die eindeutige Liste nicht leer ist, durchlaufen Sie die eindeutige Liste. Wenn das aktuelle Element nicht mit dem aktuellen eindeutigen Element übereinstimmt, fügen Sie es als eindeutiges Element hinzu. Was Sie tun möchten, ist zu sagen: "Wenn das aktuelle Element nicht ** irgendwelcher ** der einzigartigen Elemente entspricht, fügen Sie es als ein einzigartiges Element hinzu". –
Warum machst du 'mc.getMarkers() [j]' wenn du 'mc.getMarkers()' bereits in 'clusterMarkers' gespeichert hast? 'clusterMarkers [j]' ist viel lesbarer, wenn man den Rest des Codes betrachtet. –
"Wenn das aktuelle Element keinem der eindeutigen Elemente entspricht, füge es als ein eindeutiges hinzu" -> Sollte dies nicht geschehen, indem alle eindeutigen Elemente durchlaufen werden und geprüft wird, ob sie dem aktuellen Element entsprechen, was das ist hast du? Oder ich habe mich wirklich verwirrt. Ja, danke für den Hinweis auf das 'mc.getMarkers() [j]' Problem. – Nyxynyx