2017-05-25 2 views
0
var hello = Array.apply(null, Array(5)).map(function (x, i) { return i; }); 

ich bekommen, was Karte tut, aber ich verstehe nicht, warum die Funktion tut, was sie tut das hello == [0, 1, 2, 3, 4]Warum ist der Ausgang [0, 1, 2, 3, 4] für diese Funktion auf dem folgenden Array?

+1

Es ist Schlüssel des Arrays der Länge 5. Was Sie verwirrt macht? –

+0

'Array.apply (null, Array (5))' gibt ein Array mit der Größe'undefiniert' zurück. Was auch immer dort ist, diese "map" -Funktion ignoriert Werte und konvertiert sie in Array [0, 1, 2, 3, 4], weil das zweite Argument von 'map' Index ist. –

+0

Siehe auch https://stackoverflow.com/questions/22949976/why-does-array-applynull-args-act-inconsistently-when-deling-with-sparse-a –

Antwort

0

Der zweite Parameter auf dem Verschluss zu map ist die Array-Schlüssel übergeben zu machen. Das ist, was zurückgegeben wird, so Sie bekommen 5 Array-Schlüssel, beginnend bei 0.

0

Vielleicht sollten wir es brechen:

var arr = Array(5); 
arr === [,,,,,]; // array with five undefined slots 
arr === [undefined, undefined, undefined, undefined, undefined]; // same as this :) 

Jeder hat einen Index:

arr[4]; // yay! => undefined 

map Durchläuft jeden Slot und die Mapping-Funktion erhält 2 Params, den Wert und den Index.

function (x, i) { return i; } 

map erzeugt ein Array aller return Werte aus der Abbildungsfunktion.

+0

_ "// Array mit fünf undefiniert Slots "_' [,,,,,, '' hat mehr als fünf Elemente :) – Andreas

+0

@Andreas Ich verstehe nicht, was du meinst. :) 'Array (5) === [,,,,,,] richtig? –

+0

'JSON.stringify (Array (5)) ->" [null, null, null, null, null] "' Vergleichen Sie die Anzahl der Kommas. In Ihrem Beispiel ist einer zu viel. – Andreas

0

Sie können herausfinden, indem ein Trockenlauf des Codes auszuführen:

var hello = Array.apply(null, Array(5)) 

An dieser Stelle:

hello == [undefined,undefined,undefined,undefined,undefined] 

Jetzt:

hello.map(function (x, i) { return i; }); 

ist das Äquivalent zu (Verwendung die Kommentare, um zu sehen, wie der folgende Bezug auf die obige Funktion:

for(var i = 0; i < hello.length; i++){ // i is the index 
    x = hello[i];      // x is the value at each index 

    // Function body below using `hello[i] = ` instead of return 
    hello[i] = i; 
} 

Daher ist das Ergebnis von jedem Element in der Liste Einstellung auf den Index dieses Elements:

[0, 1, 2, 3, 4] 
Verwandte Themen