Ich habe also zwei Arrays:
%Vor%Was ist der schnellste Weg, um ein neues Array zu erstellen, das ist der Unterschied zwischen diesen beiden? In Old-School-JavaScript müssten Sie eine for-Schleife in einer anderen for-Schleife machen, denke ich ...
ZB:
%Vor% Sie können filter()
und find()
verwenden, um das gefilterte Array zurückzugeben.
Sie könnten auch map()
second array verwenden und dann includes()
verwenden, um Duplikate herauszufiltern.
Inspiriert von der ausgezeichneten Antwort von @Ori Drori ist hier eine reine Set-basierte Lösung.
%Vor%wo
%Vor% availableLanguages
wird ein Set sein. Um mit ihm als Array zu arbeiten, müssen Sie Array.from
oder [...map]
darauf setzen.
Wenn man alles funktional haben wollte, dann
%Vor%Schreiben Sie jetzt
%Vor%was für manche semantischer oder lesbarer sein könnte.
Diese Lösungen sind jedoch etwas unbefriedigend und könnten suboptimal sein. Obwohl Set#has
ist O(1)
, im Vergleich zu O(n)
für find
oder some
, ist die Gesamtleistung immer noch O(n)
, da wir alle Elemente von a
durchlaufen müssen. Es wäre besser, die Elemente aus b
von a
zu löschen, wie in einer anderen Antwort vorgeschlagen wurde. Das wäre
Wir können reduce
nicht verwenden, da dies nicht für Sets verfügbar ist, und wir möchten das Set nicht in ein Array konvertieren müssen, um es zu verwenden. Aber wir können forEach
verwenden, das auf Sets verfügbar ist. Diese Alternative wäre vorzuziehen, wenn a
größer und b
kleiner ist.
Sehr wahrscheinlich wird eine zukünftige Version von JS diese Funktion enthalten, so dass Sie einfach
sagen können %Vor%Wenn wir schließlich weitere ES6-Funktionen erkunden möchten, könnten wir dies als Generator schreiben, der nicht-doppelte Werte erzeugt, wie in
%Vor%Jetzt können wir schreiben
%Vor%Diese Lösung wäre vielleicht zu empfehlen, wenn es eine lange Liste von Sprachen gäbe, die vielleicht nacheinander kommen würden, und Sie wollten einen Strom der nicht verwendeten Sprachen erhalten.
Wenn man O(1)
nach der Liste der Ausschlüsse suchen möchte, ohne Sätze zu verwenden, ist der klassische Ansatz, ein Wörterbuch vorzuberechnen:
Wenn diese Art, das Wörterbuch zu berechnen, für Sie zu geheimnisvoll ist, verwenden einige Leute reduce
:
Nina schreibt das gerne mit dem Komma-Operator als
%Vor%speichert einige geschweifte Klammern.
Oder, da JS immer noch for
loops hat: -):
Hey, du bist derjenige, der gesagt hat, dass du ES6 benutzen willst.
Iteriere die usedLanguages
mit Array#reduce
, mit new Set(allLanguages)
als Startwert. Löschen Sie die Sprache von used
Setzen Sie sie bei jeder Iteration. Verteilen Sie das Ergebnis in einem Array. Die Komplexität ist O (n + m), wobei n die Länge des Arrays usedLanguages
und m die Länge von allLanguages
:
Tags und Links javascript arrays ecmascript-6