2013-11-15 20 views
12

Gibt es eine einfache Möglichkeit, ein Array von leeren Strings in Javascript zu erstellen? Derzeit ist die einzige Art, wie ich denken kann, es zu tun mit einer Schleife:Array leerer Strings erstellen?

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

aber ich frage mich, ob es irgendeine Art und Weise ist dies in einer Zeile zu tun, entweder regelmäßig Javascript oder Coffeescript verwenden.

Antwort

37

Update: auf neueren Browsern - verwenden Sie .fill: Array(1000).fill('') erstellt ein Array von 1000 leere Zeichenfolgen.


Ja, es gibt einen Weg:

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

ich wahrscheinlich obwohl die Schleife verwenden würde, es vermittelt Absicht klarer.

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

Auf diese Weise ist es völlig klar, was getan wird, und Sie können es wiederverwenden.

+3

+1 für Cleverness und für die Erwähnung, dass die Verwendung der Schleife macht die Absicht klar. –

+1

Das ist eine coole Idee :-) Diese zweite Funktion kommt mir bekannt vor ;-) – qwertynl

+3

* (Leise wartet auf jemanden, der den Indexindex um eins erhöht) * –

1

Sie könnte eine Funktion machen aus ihm heraus:

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

Sie so etwas tun könnte:

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

behoben Falls jemand fragt sich, wie es funktioniert http: //stackoverflow.com/questions/18947892/creating-range-in-javascript-strange-syntax :) –

0

Just for fun

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

+1 für clevere Tricks mit 'valueOf'. Randnotiz - Neu ist hier überflüssig. –

+0

Etwas kürzer: 'String (Array ([length])).Split (','). map (String.prototype.valueOf, '') ' – KooiInc

+0

Was ist mit den downvotes? Nur neugierig, da es funktioniert. – epascarello

0

Die einfachste Sache zu In CoffeScript verwenden Sie einen loop comprehension:

a = ('' for i in [0 ... someLength]) # Note: 3 dots 
a = ('' for i in [1 .. someLength]) # Or 2 dots and start at 1 
#... 

Demo: http://jsfiddle.net/ambiguous/b9Vj9/

+0

Speichern Sie drei Zeichen mit etwas Golf ;-) '[1..5] .map (-> '')' – joeytwiddle

8

hier ist ein einfacher Weg, generic protos auf Array und String mit:

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

EDIT: Da ist jetzt noch einfache Möglichkeiten, von denen einige lesbar sind:

Array(1000).fill(""); 

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

(Erzeugt 1001 leere Zeichenfolgen.) – joeytwiddle

0

Obwohl nicht allgemein verfügbar, sobald Browser beginnen, EcmaScript 6 Array co zu unterstützen mprehensions, werden Sie in der Lage sein, etwas zu tun, nach dem Vorbild der:

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

Diese sind nicht länger Teil von ECMAScript 6. (Berücksichtigt für ES7) –

+0

@BenjaminGruenbaum seufzen ... wirklich? Große Enttäuschung = ( – rdodev

+0

Nicht berücksichtigt für ES9 an dieser Stelle –

0

Sie können ein Array erhalten die Größe definiert, und füllen Sie es mit einigen Token.

var n = Array (Größe) .fill ("");

+0

Willkommen zu StackOverflow: Wenn Sie Code, XML oder Datenbeispiele posten, markieren Sie diese Zeilen bitte im Texteditor und klicken Sie auf den "Code Samples" Button ({}) die Editor-Symbolleiste oder mit Strg + K auf Ihrer Tastatur, um es schön formatieren und Syntax markieren! – WhatsThePoint

+0

Was fügt diese Antwort hinzu, die nicht bereits besser in der angenommenen Antwort ausgedrückt wurde? – Mogsdad

Verwandte Themen