2010-12-01 7 views
7

I wurde in jconsoleLustig Verhalten von Array.splice()

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

hier mit dem Spleiß() Methode experimentiert, a ist eine einfache Anordnung von 1 bis 10.

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

Und

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

Wenn ich das Array B mit dem dritten Argument der Spleiß passieren, meine ich „entfernen, die ersten beiden Argumente a von Index Null, und ersetzen Sie sie durch die b-Array ". Ich habe nie gesehen, ein Array als Spleiß() 's drittes Argument (alle guide pages I read reden über eine Liste von Argumenten) übergeben, aber, nun ja, es scheint den Trick zu tun. [1,2] werden entfernt und jetzt ist a [a, b, c, 3,4,5,6,7,8,9,10]. Dann baue ich ein weiteres Array, die ich c nennen:

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

Und versuchen, das gleiche zu tun:

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

Diesmal 4 (statt 2) Elemente entfernt werden [a, b, c , 3] und das c-Array wird am Anfang hinzugefügt. Jemand weiß warum? Ich bin mir sicher, dass die Lösung trivial ist, aber ich verstehe es jetzt nicht.

Antwort

6

Array.splice tut nicht unterstützt ein Array als dritter Parameter.
Referenz: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice

Mit Firebug (oder Chrome-Konsole), so sieht man, was wirklich passiert:

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

Problem hier ist jconsole, die toString() nur verwendet aus der Arrays zu drucken, aber Array.toString() wird nicht gedruckt alle [].

+0

Großartig. Ich wurde durch die "flachen" jconsole Antworten (wo alles schien ein einziges Array, nicht die b-Array als das erste Mitglied der ersten, a) in die Irre geführt. Alles ist jetzt klar. – janesconference