0
配列にすべての一意のオブジェクトを格納する配列clusterUniqueMarkers
を作成するコードスニペットがあります。配列サイズが爆発する
問題:console.log(clusterUniqueMarkers.length);
の助けを借りて、その配列のサイズが爆発するのがわかります!コードが実行されると、ブラウザのCPU &メモリ使用量が増加し、クラッシュします。何が問題を引き起こしたのでしょうか?
JSコード
// 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);
});
あなたのロジックが間違っている:何がしたいことは、「現在の要素がユニークなものの任意の等しくない場合は、独自の一つとして、それを追加します」と言うこのコードは達成する、です。あなたはcluserMarkersのすべての要素を繰り返して、次のように言っています。一意のリストが空の場合は、現在の要素を一意のものとして追加します。一意のリストが空でない場合は、一意のリストを反復処理し、現在の要素が現在の一意の要素と一致しない場合は、一意のリストとして追加します。あなたがしたいことは、「現在の要素が、**ユニークな要素のいずれか**と等しくない場合は、それをユニークな要素として追加する」と言うことです。 –
また、 'mc.getMarkers()'を 'clusterMarkers'にすでに保存しているときに' mc.getMarkers()[j] 'をやっているのはなぜですか? 'clusterMarkers [j]'は、コードの残りの部分を見ると、はるかに読みやすくなります。 –
"現在の要素が一意のものと等しくない場合は、それを一意のものとして追加します" - >これは、すべての一意の要素を反復処理して、現在の要素した?あるいは、私は本当に混乱しているかもしれません。 'mc.getMarkers()[j]'問題を指摘してくれてありがとう。 – Nyxynyx