2010-12-01 7 views
7

I estaba experimentando con el método de corte y empalme() en jconsolecomportamiento divertido de Array.splice()

a = [1,2,3,4,5,6,7,8,9,10] 
1,2,3,4,5,6,7,8,9,10 

Aquí, a es una matriz sencilla de 1 a 10.

b = ['a','b','c'] 
a,b,c 

Y esto es b

a.splice(0, 2, b) 
1,2 
a 
a,b,c,3,4,5,6,7,8,9,10 

Cuando paso la matriz B para el tercer argumento de empalme, quiero decir "quitar los dos primeros argumentos de a del índice cero, y reemplázalos con la matriz b ". Nunca he visto pasar una matriz como tercer argumento de empalme() (todos los guide pages I read hablan sobre una lista de argumentos), pero, bueno, parece ser el truco. [1,2] se eliminan y ahora a es [a, b, c, 3,4,5,6,7,8,9,10]. Entonces construyo otra matriz, que llamo c:

c = ['one','two','three'] 
one,two,three 

y tratar de hacer lo mismo:

a.splice(0, 2, c) 
a,b,c,3 
a 
one,two,three,4,5,6,7,8,9,10 

Esta vez, 4 (en lugar de 2) elementos se eliminan [a, b, c , 3] y la matriz c se agrega al comienzo. Alguien sabe por qué? Estoy seguro de que la solución es trivial, pero no lo entiendo ahora mismo.

Respuesta

6

Array.splice hace no admite una matriz como tercer parámetro.
Referencia: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice

Usando Firebug (o consola de Chrome), uno ve lo que realmente sucede:

a.splice(0, 2, b) 
> [1, 2] 
a 
> [["a", "b", "c"], 3, 4, 5, 6, 7, 8, 9, 10] 

problema aquí es jconsole, que sólo utiliza toString() para imprimir los arrays, pero Array.toString() no imprime cualquier [].

+0

Genial. Las respuestas "planas" de jconsole (donde todo parecía ser una única matriz, no la matriz b como el primer miembro de la primera, a) me engañaron. Todo está claro ahora. – janesconference

Cuestiones relacionadas