In einer anderen Frage von mir jemand eine wirklich coole Lösung, wie ein n-tes verschachteltes Array in ein Array abgeflacht. Da ich keinen langen Chat beginnen wollte und ich immer noch nicht wirklich verstehe, was dieser Code macht, dachte ich, ich würde fragen.Verflacht Array Array-Code
Also mein Eindruck ist, dass zuerst in diesem Fall unser Array Länge 2 hat, und dann wird es 1 in der While-Schleife. Wir prüfen dann ist array[1]
, ist ein Array. Es ist so, dass wir fortfahren. Jetzt bin ich hier ein bisschen verwirrt. Ich glaube, wir rufen die flatten
Funktion wieder auf, so dass wir in die verschachtelten Arrays gelangen können, aber ich bin immer noch irgendwie unklar bezüglich der Argumentation. Wir nehmen dann array[1]
und schneiden es, hier schneidet nicht gerade schneiden, das ganze array[l]
sowieso bekommen? da wir von der 0. Position bis zum Ende gehen, da slice()
keine Parameter hat.
function flatten(array) {
var l = array.length, temp;
while (l--) {
if (Array.isArray(array[l])) {
flatten(array[l]);
temp = array[l].slice();
temp.unshift(1);
temp.unshift(l);
[].splice.apply(array, temp);
}
}
}
var array = [['1', '2', '3'], ['4', '5', ['6'], ['7', '8']]];
flatten(array);
console.log(array);
https://jsfiddle.net/curw7mdp/
Nein, die Array-Länge beginnt bei 3 und jede Iteration der Schleife dekrementiert sie. [] .splice macht nichts alleine, du wirst die Methode apply lesen müssen. Es ist eine sehr seltsame Syntax, ich bin mir nicht sicher, der beste Weg, es zu erklären. – master565
Entschuldigung. Ja, es ist ein 2-Elemente-Array. Ich habe es falsch verstanden. – master565
Auch im Zusammenhang mit der Anwendungsfunktion. Splice ist eine Methode, die auf Arrays funktioniert, und so [] ist ein leeres Array, auf dem die Funktion aufgerufen werden kann. – master565