2010-12-28 12 views

Odpowiedz

54

Nie ma takiej funkcji, ale hej, można go utworzyć:

String.prototype.repeat = function(times) { 
    return (new Array(times + 1)).join(this); 
}; 

Zastosowanie:

var s = " ".repeat(3); 

oczywiście można napisać to jako część autonomicznego grupy funkcji:

var StringUtilities = { 
    repeat: function(str, times) { 
     return (new Array(times + 1)).join(str); 
    } 
    //other related string functions... 
}; 

Zastosowanie:

var s = StringUtilities.repeat(" ", 3); 
+1

Wolę to rozwiązanie od mojego. Nie wiedziałem, że możemy dodać funkcjonalność do klasy String i ewentualnie do dowolnej klasy. –

+9

Ahhh, odejdź z prototypowym rozszerzeniem ... –

+0

@Sybiam - możesz, ale nie rób tego. Cóż, jeśli jest to coś uniwersalnie użyteczne, OK, ale coś w tym stylu, umieść je w bibliotece. – Malvolio

0

nie Czy próbowałeś z pętlą

for (var i = 0; i < 3; i++) { 
    s += "&nbsp;"; } 

?

2

Myślę, że najlepszym i jedynym sposobem na osiągnięcie tego jest zapętlenie łańcucha znaków. O ile mi wiadomo, nie ma takiej funkcji w żadnym języku.

function multiString(text, count){ 
    var ret = ""; 
    for(var i = 0; i < count; i++){ 
     ret += text; 
    } 
    return ret; 
} 

var myString = multiString("&nbsp;", 3); 

Ale domyślam się, że możesz to rozgryźć.

+0

Perl ma operatora X, aby powtórzyć takie rzeczy - są też inne języki –

+0

Wiem, że w pythonie i od rozwiązania poniżej możemy to zrobić za pomocą tablic i dołączyć. Ale nie uważam tych rozwiązań za funkcje. Nie wiem o operatorze X, ale obecnie nie jestem zaskoczony Perlem. Po tym jak zobaczyłem okresową tabelę operatorów dla perla. Nic mnie już nie zaskoczy. –

5

Można również użyć Array.join:

function repeat(str, times) { 
    return new Array(times + 1).join(str); 
} 

> repeat('&nbsp;', 3) 
"&nbsp;&nbsp;&nbsp;" 
5

Oto zgrabny sposób, że nie obejmuje pętle. Oprócz zwięzłości, jestem całkiem pewny, że użycie join jest o wiele bardziej wydajne w przypadku bardzo dużych ciągów.

function repeat(str, num) { 
    return (new Array(num+1)).join(str); 
} 

Można również umieścić ten kod na prototypie String, ale jestem od myślenia, że ​​to zły pomysł, aby bałagan z prototypem wbudowanych typów.

Powiązane problemy