2013-11-15 21 views
12

Czy istnieje prosty sposób utworzenia tablicy pustych ciągów w javascript? Obecnie jedynym sposobem można myślę, aby to zrobić jest z pętlą:Tworzenie tablicy pustych ciągów?

var empty = new Array(someLength); 
for(var i=0;i<empty.length;i++){ 
    empty[i] = ''; 
} 

ale zastanawiam się, czy jest jakiś sposób, aby to zrobić w jednej linii przy użyciu zarówno regularne JavaScript lub coffeescript.

Odpowiedz

37

Aktualizacja: w nowszych przeglądarkach - użyj .fill: Array(1000).fill('') utworzy tablicę 1000 pustych ciągów.


Tak, jest na to sposób:

var n = 1000; 
Array(n).join(".").split("."); // now contains n empty strings. 

pewnie bym użyć pętli chociaż, to oddaje intencji wyraźniejsze.

function repeat(num,whatTo){ 
    var arr = []; 
    for(var i=0;i<num;i++){ 
     arr.push(whatTo); 
    } 
    return arr; 
} 

W ten sposób doskonale wiadomo, co się robi i można go ponownie wykorzystać.

+3

+1 za sprytność i za wzmiankę o tym, że użycie pętli sprawia, że ​​cel jest jasny. –

+1

To świetny pomysł :-) Ta druga funkcja wygląda znajomo ;-) – qwertynl

+3

* (Cicho czeka na kogoś, kto podniesie go o jeden offset indeksu) * –

1

Ty mógłby utworzyć funkcję z niego:

function stringArray(length) { 
    var arr = []; 
    for(var i = 0; i < length; ++i) { arr.push(''); } 
    return arr; 
} 
0

Można zrobić coś takiego:

var someLength = 10; 
var empty = Array.apply(0, Array(someLength)).map(function(){return '';}); 
// result: ["", "", "", "", "", "", "", "", "", ""] 
+2

Jeśli ktoś zastanawia się jak to działa http: //stackoverflow.com/questions/18947892/creating-range-in-javascript-strange-syntax :) –

0

tylko dla zabawy

var empty = Array.apply(null, new Array(someLength)).map(String.prototype.valueOf,""); 
+0

+1 dla sprytnej sztuczki z 'valueOf'. Nota boczna - tutaj nowa redundancja. –

+0

Trochę krótszy: 'String (Array ([length])).split (','). map (String.prototype.valueOf, '') ' – KooiInc

+0

Co się dzieje ze spadkiem? Po prostu ciekawy, ponieważ działa. – epascarello

8

tu jest prostszy sposób przy użyciu rodzajowe Protos na tablicy i wyrażenie:

"".split.call(Array(1001), ",") 

EDIT: Jest teraz jeszcze prostsze sposoby, z których niektóre są czytelne:

Array(1000).fill(""); 

" ".repeat(999).split(" "); 
+0

(Tworzy 1001 pustych ciągów znaków.) – joeytwiddle

0

Chociaż nie jest powszechnie dostępna, po uruchomieniu przeglądarek rozpocznie się obsługa tablic EcmaScript 6 mprehensions, będzie w stanie zrobić coś wzdłuż linii:

var n = 1000; 
var empty_strs = ['' for (x of new Array(n))] 
+1

To już nie jest część ECMAScript 6. (Rozważany dla ES7) –

+0

@BenjaminGruenbaum westchnienie ... naprawdę? Duże rozczarowanie = ( – rdodev

+0

Nie jest brane pod uwagę dla ES9 w tym momencie –

0

można uzyskać tablicę określaniu wielkości i wypełnić go z jakimś tokena.

var n = Array (size) .fill ("");

+0

Witamy w StackOverflow: jeśli publikujesz kod, XML lub próbki danych, zaznacz je w edytorze tekstu i kliknij przycisk "próbki kodu" ({}) pasek narzędzi edytora lub użycie klawiszy Ctrl + K na klawiaturze, aby ładnie sformatować i podświetlić składnię! – WhatsThePoint

+0

Co zawiera ta odpowiedź, która nie została jeszcze lepiej wyrażona w zaakceptowanej odpowiedzi? – Mogsdad

Powiązane problemy