Obecnie repeat
metoda łańcuchowa jest implementowana prawie wszędzie. (Nie ma go w Internet Explorerze .) Więc jeśli nie potrzebujesz obsługi starszych przeglądarek, możesz po prostu napisać:
"a".repeat(10)
Wcześniej repeat
korzystaliśmy z tego hacka:
Array(11).join("a") // create string with 10 a's: "aaaaaaaaaa"
(Zauważ, że tablica o długości 11 daje ci tylko 10 „a”, ponieważ Array.join
umieszcza argument między elementami tablicy.)
Simon wskazuje również, że zgodnie z tym jsperfem wydaje się, że w Safari i Chrome (ale nie Firefox) jest szybsze wielokrotne powtarzanie postaci po prostu przez dodanie pętli for (choć nieco mniej zwięzłe).
Array(rawValue.length + 1).join("*")
Array(n+1).join("a")
. Gdy n = 0, zwraca pusty ciąg, a gdy n = 1, zwraca"a"
. Myślę, że to działa we wszystkich przypadkach.W nowej harmonii ES6 będziesz miał rodzimy sposób na powtarzanie tego . Również ES6 teraz tylko eksperymentalny, ta funkcja jest już dostępna w Edge, FF, Chrome i Safari
I na pewno, jeśli funkcja powtarzania nie jest dostępna, możesz użyć starego dobra
Array(n + 1).join("abc")
źródło
Wygodne, jeśli często się powtarzasz:
źródło
repeat(str, n)
.n= n || 1
część (lub sprawdzić, czyn
jest niezdefiniowana), abyś mógł również powtarzać0
czasy.String.repeat
został dodany tylko w ES6, który został sfinalizowany dopiero w czerwcu 2015 r. Myślę więc, że mój punkt widzenia był ważny, kiedy napisałem go w 2012 r. :)Najbardziej efektywnym sposobem na obniżenie wydajności jest https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat
Krótka wersja jest poniżej.
Polyfill z Mozilli:
źródło
count >>>= 1, pattern += pattern;
? jakie to stwierdzenie?if (!String.prototype.repeat) {
na początku i}
na końcu.Alternatywą jest:
Jeśli chcesz powtórzyć wiele znaków, pomnóż warunek:
UWAGA: Nie musisz przekraczać 1, jak w przypadku
word = Array(11).join('a')
źródło
Jeśli nie masz nic przeciwko włączeniu biblioteki do swojego projektu, lodash ma funkcję powtarzania.
https://lodash.com/docs#repeat
źródło
Dla wszystkich przeglądarek
Poniższa funkcja będzie działać znacznie szybciej niż opcja sugerowana w zaakceptowanej odpowiedzi:
Użyłbyś tego w ten sposób:
Aby porównać wydajność tej funkcji z wydajnością opcji zaproponowanej w zaakceptowanej odpowiedzi, zobacz ten Fiddle i ten Fiddle dla testów porównawczych.
Tylko dla współczesnych przeglądarek
W nowoczesnych przeglądarkach możesz teraz to zrobić za pomocą
String.prototype.repeat
metody:Przeczytaj więcej o tej metodzie na MDN .
Ta opcja jest jeszcze szybsza. Niestety nie działa w żadnej wersji Internet Explorera. Liczby w tabeli określają pierwszą wersję przeglądarki, która w pełni obsługuje tę metodę:
źródło
Chociaż najczęściej głosowana odpowiedź jest nieco bardziej zwarta, dzięki takiemu podejściu nie musisz dodawać dodatkowego elementu tablicy.
źródło
fill()
jeśli zrobiłbyś to samo zjoin("a")
samym ...źródło
W ES2015 / ES6 możesz używać
"*".repeat(n)
Po prostu dodaj to do swoich projektów i gotowe.
źródło
Innym ciekawym sposobem na szybkie powtórzenie n znaku jest użycie pomysłu z algorytmu szybkiego potęgowania:
źródło
Do powtórzenia wartości w moich projektach używam powtarzania
Na przykład:
ale bądź ostrożny, ponieważ ta metoda została dodana do specyfikacji ECMAScript 6.
źródło
źródło
Oto czego używam:
źródło
Mam zamiar rozwinąć odpowiedź @ bonbon . Jego metoda jest łatwym sposobem „dołączenia N znaków do istniejącego łańcucha”, na wypadek, gdyby ktoś musiał to zrobić. Na przykład, ponieważ „google” to 1, po którym następuje 100 zer .
UWAGA: Musisz dodać długość warunku oryginalnego do warunkowego.
źródło
Lodash oferuje podobną funkcjonalność jak funkcja Javascript repeat (), która nie jest dostępna we wszystkich przeglądarkach. Nazywa się _.repeat i jest dostępny od wersji 3.0.0:
źródło
źródło
Może być również stosowany jako jedna linijka:
źródło
W CoffeeScript:
źródło
w ten sposób można wywołać funkcję i uzyskać wynik za pomocą Array () i join ()
źródło
źródło
String.prototype.repeat
to natywnie zawarte w obecnych przeglądarkach. Ponadto, dlaczego to zminimalizować? Nie musisz pisać wszystkiego w jednym wierszu.Oto wersja ES6
źródło