I ein Array von Objekten ähnlich den folgenden haben:gleichwertig, aber einzigartige Objekte aus einer JavaScript-Array Entfernen
var routeArr = [
{start: 1, end: 2},
{start: 1, end: 3},
{start: 1, end: 4},
{start: 2, end: 1},
{start: 3, end: 1},
{start: 4, end: 1}
];
Diese Objekte stellen die Anfangs- und Endpunkt der Linien und als solche {start: 1, end: 2}
und {start: 2, end: 1}
die gleichen Linie.
Ich versuche, alle doppelten Zeilen aus dem Array zu entfernen und kann keine effiziente oder elegante Möglichkeit finden, es zu tun. Ich habe eine verschachtelte Schleife versucht, aber mir wurde gesagt, dass das eine schlechte Übung ist (und ich bekomme Fehler mit meiner Implementierung, und es ist nur hässlich).
for(var i = 0, numRoutes = routeArr.length; i < numRoutes; i++) {
var primaryRoute = routeArr[i];
for(var j = 0; j < numRoutes; j++) {
var secondRoute = routeArr[j];
if(primaryRoute.start === secondRoute.end && primaryRoute.end === secondRoute.start) {
routeArr.splice(j, 1);
continue;
}
}
}
Kann jemand Vorschläge anbieten?
Der normale Weg dafür ist: Sortiere es zuerst (in deinem Fall solltest du den Anfang umkehren und enden wenn (Ende> Start)). Dann werden die doppelten Zeilen genau gleich sein. Dann einfach Schleife, um das Duplikat zu entfernen – Kelvin
Wenn Sie ein Element des Arrays entfernen, führen Sie nie Schleife von 0 bis Länge. es ist nicht sicher, weil Sie nach dem Entfernen Ihre Indizes anpassen müssen. Bessere Laufschleife in absteigender Reihenfolge, d. H. Von Länge 1 bis 0, dies wird funktionieren, falls Sie ein Element des Arrays entfernen und niemals Elemente mit größeren Indizes zurückkommen werden.Auch Ihre if-Anweisung prüft nur eine Bedingung, eine identische Zeile zu sein, Sie müssen auch eine andere Überprüfung mit oder Anweisung hinzufügen. – simon