2013-11-15 33 views
12

C'è un modo semplice per creare un array di stringhe vuote in javascript? Attualmente l'unico modo che posso pensare di farlo è con un ciclo:Creazione di un array di stringhe vuote?

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

ma mi chiedo se c'è qualche modo per fare questo in una sola riga utilizzando normale javascript o CoffeeScript.

risposta

37

Aggiornamento: sui nuovi browser - utilizzare .fill: Array(1000).fill('') creerà una matrice di 1000 stringhe vuote.


Sì, c'è un modo:

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

probabilmente sarei utilizzare il ciclo, però, che veicola l'intento chiaro.

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

In questo modo, è perfettamente chiaro cosa si sta facendo e si può riutilizzarlo.

+3

+1 per intelligenza e per menzionare che l'uso del loop rende chiaro l'intento. –

+1

Questa è una bella idea :-) Questa seconda funzione sembra familiare ;-) – qwertynl

+3

* (attende tranquillamente che qualcuno rilevi con un offset dell'indice) * –

1

Si potrebbe fare una funzione di fuori di esso:

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

Si potrebbe fare qualcosa di simile:

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

Nel caso qualcuno si chiedesse come funziona http: //stackoverflow.com/questions/18947892/creating-range-in-javascript-strange-syntax :) –

0

Solo per divertimento

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

+1 per un trucco intelligente con 'valueOf'. Nota a margine: nuovo è ridondante qui. –

+0

Un po 'più breve: 'String (Array ([length])).split (','). map (String.prototype.valueOf, '') ' – KooiInc

+0

Che cos'è con i downvotes? Solo curioso dal momento che funziona. – epascarello

0

La cosa più facile da fare in CoffeeScript è utilizzare un 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

Salva tre caratteri con un po 'di golf ;-) '[1..5] .map (->' ')' – joeytwiddle

8

Ecco un modo semplice utilizzando protos generici su Array e String:

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

EDIT: C'è ora anche modi più semplici, alcuni dei quali sono leggibili:

Array(1000).fill(""); 

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

(Produce 1001 stringhe vuote.) – joeytwiddle

0

Anche se non ampiamente disponibile, una volta che i browser iniziano a supportare EcmaScript 6 array co mprehensions, si sarà in grado di fare qualcosa sulla falsariga di:

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

Questi non fanno più parte di ECMAScript 6. (Considerato per ES7) –

+0

@BenjaminGruenbaum sospiro ... davvero? Major disappointment = ( – rdodev

+0

Non considerato per ES9 a questo punto –

0

è possibile ottenere una matrice che definisce la dimensione e riempirlo con qualche segno.

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

+0

Benvenuti in StackOverflow: se inserisci codice, XML o campioni di dati, evidenzia queste righe nell'editor di testo e fai clic sul pulsante "esempi di codice" ({}) in la barra degli strumenti dell'editor o l'utilizzo di Ctrl + K sulla tastiera per formattarlo in modo gradevole e la sintassi lo evidenziano! – WhatsThePoint

+0

Cosa aggiunge questa risposta che non era già espressa meglio nella risposta accettata? – Mogsdad

Problemi correlati