Ich habe eine Anwendung erstellt, in der Sie eine Tabelle in einer Datenbank auswählen und dann die Daten auf einer Leaflet-Map anzeigen können. Die Daten haben eine übereinstimmende Legende.Unbeabsichtigte Doppelschleifen in JavaScript
Ich möchte, dass meine Anwendung eine Vielzahl von Datensätzen akzeptiert und in der Lage ist, sie mit minimalen Programmieränderungen auf der Karte anzuzeigen. Dies ist eine neue Anforderung und ich habe meinen vorherigen Code geändert, aber es ist nicht optimal.
Der Code, den ich jetzt habe, durchläuft das Dataset, um einem bestimmten Wert eine Farbe zuzuweisen, aber es durchläuft auch das Dataset, um die eindeutigen Werte zu extrahieren, sodass ich sie in der Legende verwenden kann.
Das verursacht, meine Anwendung eine Schleife in einer Schleife zu haben, die unnötige Berechnungen generiert. Dies ist kein Problem mit einem kleinen Datensatz, 19 Datensätze x19 ist machbar, aber 8062x8062 ...
Die for-Schleife in der getColor()
-Funktion ist das Problem. Ich habe versucht, die for-Schleife zu einer neuen Funktion (getColor v2) zu verlagern, aber am Ende fehlt immer arrayMetKetens
. Ich denke, getColor()
läuft vor getArray()
kann seinen Wert zurückgeben, aber weil viele Funktionen starten, sobald ich eine Tabelle auswählen, kann ich nicht wirklich getArray()
zwingen, es schneller zurückzugeben. Oder ist es da?
-Code für das Hinzufügen von Farbe zu Marker/Polygone:
window["mapDataLayer"] = L.geoJson(geojson_dataTable, {
pointToLayer: function (feature, latlng) {
var markerStyle = {
fillColor: getColor(feature.properties.Fastfoodketen),
color: "#696969",
fillOpacity: 0.6,
opacity: 0.9,
weight: 1,
radius: 8
};
return L.circleMarker(latlng, markerStyle);
},
style: function (feature){
if(feature.geometry.type === 'MultiPolygon'){
var polygonStyle = {
fillColor: getColor(feature.properties.Naam),
color: "grey",
weight: 5,
opacity: 1
};
}
else{
return null;
}
return polygonStyle;
}
}).addTo(map);
getColor Funktion:
function getColor(keten) {
checkTable();
var ketens = [];
for(i=0;i<(geojson_dataTable.features).length;i++){
ketens = ketens.concat(Object.byString(geojson_dataTable, 'features['+i+'].properties.'+featureVoorSorteer))
}
console.log(ketens);
arrayMetKetens = (jQuery.unique(ketens));
var i = arrayMetKetens.indexOf(keten);
if (i !== -1) {
return arrayKleur[ i ];
}
else {
return '#999999';
}
}
getColor v2:
function getArray(){
var ketens = [];
for(i=0;i<(geojson_dataTable.features).length;i++){
ketens = ketens.concat(Object.byString(geojson_dataTable, 'features['+i+'].properties.'+featureVoorSorteer))
console.log(ketens);
}
arrayMetKetens = (jQuery.unique(ketens));
return arrayMetKetens.
}
function getColor(keten) {
checkTable();
getArray();
yMetKetens.indexOf(keten);
if (i !== -1) {
return arrayKleur[ i ];
}
else {
return '#999999';
}
console.log("hij doet het")
}
Ich denke, du solltest eine neue Frage stellen, wenn du ein neues Problem hast. Das heißt: Wenn Ihr Problem so ist, wie Sie es erwarten, sollte es leicht zu bestätigen sein, indem Sie einige 'console.log()' s an verschiedenen Stellen in Ihrem Code hinzufügen, um zu prüfen, ob die Ausführungsreihenfolge so ist, wie Sie es erwarten Sein. – Jieter
Ihr Recht, Rollback und eine brandneue Frage. –