2012-09-11 8 views
5

Ispirato da this popular speech Ho voluto capire alcuni problemi relativi alla creazione di array. Diciamo che sto creando nuova matrice con:Javascript nuovo metodo Array e join()

Array(3)

In console sto ottenendo:

[undefined, undefined, undefined]

che è abbastanza evidente. Diciamo che io sto facendo entrare su tale matrice:

Array(3).join()

Come risposta sto ottenendo:

",,"

che è abbastanza comprensibile così, perché questi sono tre stringhe vuote, separati con le virgole, suppongo. Ma quando sto cercando di fare:

Array(3).join("lorem")

sto ottenendo stringa con solo due ripetizione di “lorem”:

"loremlorem"

Perché ci sono due, non tre ripetizioni di quella parola ?

+3

Ci sono solo 2 le virgole quando si utilizza 'uniscono()', perché si aspetta che ci sia 3 'lorem's? –

+2

perché questo sta scendendo? – Phil

+0

Grazie per tutte le vostre risposte. Sembra che io abbia interpretato erroneamente il metodo di 'join()'. Ora è tutto chiaro per me. – user1292810

risposta

8

join unisce gli elementi insieme, utilizzando ciò che è stato passato come falegname. In modo da avere tre stringhe vuote "che circondano" le lorem s:

|lorem|lorem| 

Potrebbe essere un po 'più evidente, se non si usa un array vuoto:

var arr = [1, 2, 3, 4, 5]; // Like Array(5), except not sparse 

arr.join('-and-'); // 1-and-2-and-3-and-4-and-5 

e il tuo primo esempio join uscita , a proposito, non è corretto. Dovrebbe essere ,, o ",,". (Dipende dal formato di output.)

+0

Certo, hai ragione su quell'uscita, colpa mia, ho modificato la domanda. – user1292810

+0

Ottengo anche il punto principale. Ho frainteso l'idea del metodo 'join()', quindi ho posto la mia domanda. – user1292810

2

Join combina gli elementi di un array con il delimitatore specificato.

Quindi, poiché ci sono 3 elementi, sono necessari solo 2 delimitatori (tra 1 ° e 2 ° e tra 2 ° e 3 °).

var a = [1,2,3]; 
a.join(','); //1,2,3 
a.join('test'); // 1test2test3 
1

Se si dispone di un array di 3 membri, il .join è il filler in tra i membri, quindi non ci dovrebbero essere solo due uniscono le stringhe.

Pertanto, la seconda uscita è corretta.

La prima uscita che utilizza .join(), sembra un bug di visualizzazione o una rappresentazione errata del codice di test.

Il valore predefinito per .join() è un ",", quindi questo:

new Array(3).join(); 

dovrebbe darvi questo:

",," 

L'output che si mostra:

[, ,] 

sarà più probabilmente provengono semplicemente digitando new Array(3) nello console senza .join().

+0

Hai ragione, è colpa mia, ho appena copiato l'output wrond. – user1292810

+0

@ user1292810: non è un problema. :) Il punto principale è che '.join()' ha un valore predefinito di '", "' quando non si passa nessun argomento. –

3

Join accetta un separatore. "lorem" ha sostituito le virgole che c'erano prima.

2

Dai un'occhiata alla documentazione di join.

Quello che stai passando alla funzione join verrà utilizzato come separatore tra gli elementi dell'array. Quando si dichiara un array con Array(3), si sta creando un array con tre elementi. Il metodo di join inserisce il separatore tra questi elementi e quindi vedrai solo due "lorem".

In realtà, quello che vedi è: blank lorem blank lorem blank. Dove vuoto è gli elementi vuoti dell'array.

cercare di fare quanto segue:

var fruits = ["banana", "orange", "apple"] 
fruits.join("lorem") 

verrà stampata

bananaloremorangeloremapple

Problemi correlati