Tag (durch Leerzeichen getrennt): call apply
Beim Schreiben von Code besteht normalerweise die Notwendigkeit, ein Array schnell zu initialisieren. Beispielsweise benötigen wir ein Funktion von Matlab, wenn wir hier ein Array von 0-23 generieren müssen, um 24 Stunden am Tag darzustellen. zeros
Der grundlegendste Ansatz ist wie folgt:
function(){ let hours = []; for(let k = 0; k < 24; k++ ) hours.push(k); return hours; }
Erwägen Sie die Verwendung der
+ new Array(24)
-Methode, um dies zu erreichen. map
Der Code lautet wie folgt:
Array(24).map((_, h) => h);
hier der Index ist, der selten verwendet wird. Hier wird der Index als numerischer Wert verwendet. map
Die Ergebnisse entsprechen nicht den Erwartungen, warum?
Nach einer kurzen Suche stellte ich fest, dass es an der Logik spärlicher Arrays in js lag.
Schauen wir uns zunächst den folgenden Code an:
let a = []; a[1000] = 2; console.log(a.length);// 1000a.forEach(x => console.log("hello"));// only one "hello"
Angenommen, es gibt keine solche Logik und wir schreiben
, was dazu führt, dass das System ein sehr großes Array erstellt, aber tatsächlich nichts speichert. new Array(Date.now())
Wir können einfach verstehen, was
durch den folgenden Prozess bewirkt: new Array(len)
function(len){ let r = []; r.length = len; return r;
oder new Array(len)
bei map
nicht den Erwartungen. forEach
Wie kann dieses Problem gelöst werden? Zusätzlich zur Verwendung der Form von
können wir auch die Schreibmethode von new Array(len)
verwenden, um das Array zu initialisieren, aber das Schreiben auf diese Weise wird unseren Zweck, das initialisierte Array zu schreiben, nicht erreichen . new Array(1,2,3)
Zu diesem Zeitpunkt dachten wir darüber nach, dass
der zweite Parameter dieser Funktion ein Array ist, also haben wir den folgenden Code geschrieben. apply
// 借用apply Array.apply(null, Array(24)).map((_, h) => h); // [0, 1, ..., 24]
bei Verwendung als Parameter in Array(24)
als 24 Werte behandelt wird, da dadurch sichergestellt wird, dass die endgültige Array-Länge 24 beträgt. apply
In diesem Fall können wir natürlich auch
s Schwesterfunktion apply
verwenden. call
// 借用call Array.call(null, ...Array(24)).map((_, h) => h); // [0, 1... 23]
Destrukturierung erhält Array(len)
-Parameter anstelle eines Parameters. Natürlich muss len
in einer Umgebung verwendet werden, die den Destrukturierungsoperator unterstützt. call
und call
vertraut gemacht haben, können wir den folgenden Code weiter schreiben: apply
// Array本身 Array(...Array(24)).map((_, h) => h); // [0, 1, ..., 24]
Darüber hinaus stellt
in ES6
eine neue Methode Array
bereit, mit der diese „freien“ Bits gefüllt werden können, um sicherzustellen, dass nachfolgende Vorgänge reibungslos ablaufen können. fill
Der spezifische Code lautet wie folgt:
// 推荐 Array(24).fill(null).map((_, h) => h);
Sie müssen jedoch auf die Verwendung der
-Methode achten und versuchen, Blindfüllungen zu vermeiden, da dies zu den oben genannten Fehlern führt, die durch die „leere“ Logik von js vermieden werden sollen. fill
Wenn Sie interessiert sind, können Sie den folgenden Code ausprobieren:
// no-fillconsole.time("no-fill");let t = Array(5e7);console.timeEnd("no-fill");// fillconsole.time("fill");let q = Array(5e7).fill(null);console.timeEnd("fill");// => no-fill: 0.240ms// => fill: 3247.921ms
Das obige ist der detaillierte Inhalt vonSo initialisieren Sie schnell ein Array mit js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!