2012-09-11 14 views
5

Inspirado por this popular speech Quería resolver algún problema relacionado con la creación de matrices. Digamos que estoy creando nueva matriz con:Javascript nuevo método Array y join()

Array(3)

En la consola que estoy recibiendo:

[undefined, undefined, undefined]

que es bastante obvio. Digamos que estoy haciendo unirse en esa matriz:

Array(3).join()

Como respuesta que estoy recibiendo:

",,"

que es bastante comprensible, así, ya que estos son tres cadenas vacías, separados por comas, supongo. Pero cuando estoy tratando de hacer:

Array(3).join("lorem")

estoy recibiendo cadena con sólo dos repetición de “lorem”:

"loremlorem"

¿Por qué hay dos, no tres repeticiones de la palabra ?

+3

Sólo hay 2 comas cuando se utiliza 'join()', ¿por qué esperar que haya 3 'lorem's? –

+2

¿por qué se va a votar? – Phil

+0

Gracias por todas sus respuestas. Parece que he interpretado incorrectamente lo que debe hacer el método 'join()'. Ahora todo está claro para mí. – user1292810

Respuesta

8

join une los elementos, utilizando lo que se pasó como un carpintero. Por lo que tiene tres cadenas vacías "en torno a" los lorem s:

|lorem|lorem| 

Podría ser un poco más obvio si no se utiliza una matriz vacía:

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 

Y el primer ejemplo de salida join por cierto, es incorrecto Debe ser ,, o ",,". (Depende del formato de salida)

+0

Por supuesto, tienes razón sobre esa salida, mi culpa, he editado la pregunta. – user1292810

+0

Obtengo el punto principal también. He malinterpretado la idea del método 'join()', así que hice mi pregunta. – user1292810

2

Unir combina los elementos de una matriz con el delimitador especificado.

Entonces, como hay 3 elementos, solo necesita 2 delimitadores (entre 1ra y 2da, y entre 2da y 3ra).

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

Si tiene una matriz de 3 miembros, el .join es el relleno en entre los miembros, por lo que sólo debe haber dos se unen cadenas.

Por lo tanto, su segunda salida es correcta.

Su primera salida usando .join(), parece un error de visualización o una representación falsa de su código de prueba.

El valor por defecto para .join() es un ",", por lo que este:

new Array(3).join(); 

debería darle esto:

",," 

La salida que mostrar:

[, ,] 

será más probablemente provenga de simplemente escribir new Array(3) en el console sin el .join().

+0

Tienes razón, es mi culpa, acabo de copiar la salida de wrond. – user1292810

+0

@ user1292810: No hay problema. :) El punto principal es que '.join()' tiene un valor predeterminado de '", "' cuando no pasa ningún argumento. –

3

Unir toma un separador. "lorem" ha reemplazado las comas que estaban allí antes.

2

Eche un vistazo a la documentación join.

Lo que está pasando a la función de unión se utilizará como separador entre los elementos de la matriz. Cuando declara una matriz con Array(3), está creando una matriz con tres elementos. El método de unión inserta su separador entre esos elementos, por lo que verá solo dos "lorem".

En realidad, lo que ves es: blank lorem blank lorem blank. Donde en blanco están los elementos vacíos de la matriz.

tratar de hacer lo siguiente:

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

se imprimirá

bananaloremorangeloremapple