Zestaw wydaje się dobrym sposobem na tworzenie tablic z gwarantowanymi unikalnymi elementami, ale nie ujawnia żadnego dobrego sposobu na uzyskanie właściwości, z wyjątkiem generatora [Set] .values, który jest wywoływany w niezręczny sposób mySet.values.next()
.
Byłoby dobrze, gdybyś mógł wywoływać map
i podobne funkcje w zestawach. Ale ty też nie możesz tego zrobić.
Próbowałem Array.from
, ale wydaje się, że konwertuje tylko obiekty tablicowe (NodeList i TypedArrays?) Na Array. Kolejna próba: Object.keys
nie działa dla zestawów, a Set.prototype nie ma podobnej metody statycznej.
Pytanie: czy istnieje jakakolwiek wygodna wbudowana metoda tworzenia tablicy z wartościami danego zestawu? (Kolejność elementów nie ma tak naprawdę znaczenia).
jeśli nie ma takiej opcji, to może jest do tego ładna idiomatyczna linijka? jak, za pomocą for...of
lub podobny?
var array = [v for (v of mySet)];
nie działa w chromie 46[...mySet]
.Array.from(mySet);
[...mySet]
ma problemy podczas kompilacji przy użyciu Typescript (zobacz ten problem ), więc prawdopodobnie bezpieczniej jest go używać,Array.from(mySet)
jeśli zamierzasz przekonwertować na Typescript w najbliższej przyszłości.via https://speakerdeck.com/anguscroll/es6-uncensored by Angus Croll
Okazuje się, że możemy użyć
spread
operatora:Lub alternatywnie użyj
Array.from
:źródło
Array.from
oraz...
Array.from
. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…chrome://flags/#enable-javascript-harmony
tę funkcję w Chrome. Pamiętaj, że jest eksperymentalna. Nie myśl, że jest to dobre rozwiązanie dla programistów.Zakładając, że używasz tylko
Set
tymczasowo, aby uzyskać unikalne wartości w tablicy, a następnie konwertujesz z powrotem na tablicę, spróbuj użyć tego:Polega to na użyciu podkreślenia lub lo-dash .
źródło
Być może za późno na imprezę, ale możesz po prostu wykonać następujące czynności:
Powinno to działać bez problemów w przeglądarkach obsługujących ES6 lub jeśli masz podkładkę, która poprawnie wypełnia powyższą funkcjonalność.
Edycja : Dzisiaj możesz po prostu użyć sugestii @ c69:
źródło
set.entries()
nich otrzymasz szereg par. Możesz użyć,set.values()
aby uzyskać zwykłą tablicę.var array = Array.from(set);
.entries
, ani.values
. Jak wspomniano powyżej @ Buffalo -Array.from(set)
wystarczy.Array.from()
nie działał zgodnie z oczekiwaniami. Ale teraz się rozprzestrzeniają iArray.from()
oba działają dobrze.Użyj operatora rozprzestrzeniania, aby uzyskać pożądany wynik
źródło
W moim przypadku rozwiązaniem było:
wartość1 równa się wartości2 => Wartość zawarta w bieżącej pozycji w zbiorze. Ta sama wartość jest przekazywana dla obu argumentów
Pracował pod IE11.
źródło
Używanie zestawu i konwertowanie go na tablicę jest bardzo podobne do kopiowania tablicy ...
Możesz więc użyć tych samych metod do kopiowania tablicy, co jest bardzo łatwe w ES6
Na przykład możesz użyć
...
Wyobraź sobie, że masz ten zestaw poniżej:
Możesz po prostu przekonwertować go za pomocą:
a wynikiem jest:
Tablica, a teraz możesz używać wszystkich metod, których możesz użyć dla tablicy ...
Inne typowe sposoby robienia tego:
lub używając pętli takich jak:
źródło
Poniższy kod tworzy zestaw z tablicy, a następnie za pomocą
...
operatora.źródło
Oto prosty sposób na uzyskanie tylko unikatowych wartości surowych z tablicy. Jeśli konwertujesz tablicę na Set, a następnie wykonaj konwersję z Set na tablicę. Ta konwersja działa tylko dla surowych wartości, dla obiektów w tablicy nie jest poprawna. Wypróbuj sam.
źródło
NAJPROSTSZA ODPOWIEDŹ
po prostu rozłóż zestaw wewnątrz []
Wynik : [1,5]
źródło