Hol dir die verschiedenen Arrays in ES6?

8

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%     
Isaac Hinman 06.12.2016, 15:23
quelle

4 Antworten

13

Sie können filter() und find() verwenden, um das gefilterte Array zurückzugeben.

%Vor%

Sie könnten auch map() second array verwenden und dann includes() verwenden, um Duplikate herauszufiltern.

%Vor%
    
Nenad Vracar 06.12.2016, 15:30
quelle
4

Sie können den folgenden Code verwenden:

%Vor%

Die Funktion some ist eine weniger bekannte Beziehung zu find , die besser für Fälle geeignet ist, in denen Sie überprüfen möchten, ob eine Bedingung von mindestens einem Element im Array erfüllt wird.

    
Shai 06.12.2016 15:37
quelle
3

Set-basierter Ansatz

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

%Vor%

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%

Generatorbasierter Ansatz

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.

Verwenden eines Wörterbuchs

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:

%Vor%

Wenn diese Art, das Wörterbuch zu berechnen, für Sie zu geheimnisvoll ist, verwenden einige Leute reduce :

%Vor%

Nina schreibt das gerne mit dem Komma-Operator als

%Vor%

speichert einige geschweifte Klammern.

Oder, da JS immer noch for loops hat: -):

%Vor%

Hey, du bist derjenige, der gesagt hat, dass du ES6 benutzen willst.

    
user663031 06.12.2016 17:33
quelle
2

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 :

ist

%Vor%
    
Ori Drori 06.12.2016 15:56
quelle

Tags und Links