In meiner CouchDB Reduce-Funktion muss ich eine Liste von Elementen auf die eindeutigen reduzieren.
Hinweis: In diesem Fall ist es in Ordnung, eine Liste zu haben, es wird eine kleine Anzahl von Elementen vom Typ String sein.
Mein aktueller Weg besteht darin, Schlüssel eines Objekts zu setzen und dann die Schlüssel dieses Objekts zurückzugeben
Seit dem Ort kann der Code Dinge wie _.uniq
nicht benutzen.
Ich würde gerne eine elegantere Art finden, es zu buchstabieren als dies.
%Vor%Im Allgemeinen ist der von Ihnen gewählte Ansatz eine gute Idee. Aber ich könnte eine Lösung vorschlagen, die den Algorithmus viel schneller macht.
%Vor%Wie Sie sehen können, haben wir hier nur eine Schleife.
Ich habe ein Beispiel erstellt, das sowohl Ihre als auch meine Lösungen testet. Versuche damit zu spielen.
Eine Alternative, die für kleine Listen geeignet ist, wäre die Unix-Befehlszeilenmethode von sort | uniq
:
Diese Funktion sortiert das Argument und filtert dann das Ergebnis, um alle Elemente auszulassen, die ihrem Vorgänger entsprechen.
Der schlüsselbasierte Ansatz ist in Ordnung und wird bessere Leistungsmerkmale für eine große Anzahl von Elementen aufweisen (O (n) zum Einfügen von n Elementen in eine Hashtabelle im Vergleich zu O (n log n) zum Sortieren des Arrays). Dies ist jedoch auf kleinen Listen wahrscheinlich nicht zu bemerken. Darüber hinaus könnten Sie diese Version ändern, um bei Bedarf eine andere Sortier- oder Gleichheitsfunktion zu verwenden. Mit Hash-Schlüsseln bleiben Sie bei JavaScripts der Idee der Schlüsselgleichheit verhaftet.
Das ist eine alte Frage, ich weiß. Bei einigen Google-Suchen steht es jedoch oben. Daher möchte ich hinzufügen, dass Sie die Antworten von @RobHague und @EugeneNaydenov mit den folgenden Elementen kombinieren können:
%Vor%Sie können auch undefinierte Werte (oft nützlich) ignorieren, indem Sie Folgendes hinzufügen:
%Vor%Sie können mit dieser Lösung hier spielen: Ссылка
Wenn Sie Object.keys verwenden, erhalten Sie Strings, wenn Sie ganzzahlige Argumente eingeben (uniq ([1,2,3]) = & gt; ['1', '2', '3']. Hier ist eins mit Array. reduzieren:
%Vor%Tags und Links javascript arrays couchdb