Heim Web-Frontend js-Tutorial 从数据结构的角度分析 for each in 比 for in 快的多_javascript技巧

从数据结构的角度分析 for each in 比 for in 快的多_javascript技巧

May 16, 2016 pm 05:29 PM
for

之前听说火狐的JS引擎支持for each in的语法,例如下述的代码:

复制代码 代码如下:

var arr = [10,20,30,40,50];
for each(var k in arr)
console.log(k);

  即可直接遍历出arr数组的内容。

  由于只有FireFox才支持,所以几乎所有的JS代码都不用这一特征。

  不过在ActionScript里天生就支持for each的语法,不论Array还是Vector,还是Dictionary,只要是可枚举的对象都可以for in和for each in。

  之前并没有感觉有太大的差异,为了懒得敲一个each单词,一直用熟悉的for in来遍历。

  不过今天仔细琢磨了会,从数据结构的角度分析了下,觉得for in和for each in效率上有着本质的区别,无论是JS还是AS。

  原因很简单:Array不是真正意义上的数组!

  何为真正意义的数组?当然就是传统语言里type[]定义的数据类型,所有元素都是连续保存的。

  “Array”虽然也是数组的意思,但熟悉JS的都知道,它其实是个非线性的伪数组,下标可以是任意数字。写入arr[1000000]并非真正申请容纳一百万个元素的空间,而是把1000000转换成相应的哈希值,对应到很小一块储存空间里,从而节省了大量内存。
  例如有如下数组:

复制代码 代码如下:

var arr = [];
  arr[10] = 1000;
  arr[20] = 2000;
  arr[30] = 5000;
  arr[40] = 8000;
  arr[200] = 9000;

用for...in遍历Array,是个很累赘的过程:

遍历时每次访问arr[k],都要进行一次Hash(k)计算,根据散列表的容量取模,如果存在冲突还得寻找最终的值结果。

如果支持for each...in的语法,其内部的数据结构就决定了会快很多:

Array里直接把每个values作为节点,通过链表关联起来维护。每当有值添加或删除,就更新其链接关系。
当for each...in遍历时,只需从第一个节点往后迭代即可,无需任何Hash计算。

当然,对于AS3里Vector这样的线性数组来说,两者相差不大;同理,HTML5里支持二进制的数组ArrayBuffer也是如此。不过从理论上来看,即使arr是个连续的线性数组,for each in还是要快一点:

for...in遍历时,每次访问arr[k]都要进行下标越界检查;而for each in则根据内部链表,直接从底层反馈出迭代变量,节省了越界检查的过程。

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

17 Möglichkeiten, den Bluescreen „kernel_security_check_failure' zu beheben 17 Möglichkeiten, den Bluescreen „kernel_security_check_failure' zu beheben Feb 12, 2024 pm 08:51 PM

Kernelsecuritycheckfailure (Kernel-Check-Fehler) ist eine relativ häufige Art von Stoppcode. Unabhängig vom Grund führt der Bluescreen-Fehler jedoch dazu, dass viele Benutzer diese Seite sorgfältig vorstellen. 17 Lösungen für den Bluescreen „kernel_security_check_failure“ Methode 1: Entfernen Sie alle externen Geräte Wenn ein externes Gerät, das Sie verwenden, nicht mit Ihrer Windows-Version kompatibel ist, kann der Bluescreen-Fehler „Kernelsecuritycheckfailure“ auftreten. Dazu müssen Sie alle externen Geräte trennen, bevor Sie versuchen, Ihren Computer neu zu starten.

Wie deinstalliere ich Skype for Business unter Win10? So deinstallieren Sie Skype vollständig auf Ihrem Computer Wie deinstalliere ich Skype for Business unter Win10? So deinstallieren Sie Skype vollständig auf Ihrem Computer Feb 13, 2024 pm 12:30 PM

Kann Win10 Skype deinstalliert werden? Diese Frage möchten viele Benutzer wissen, da viele Benutzer feststellen, dass diese Anwendung im Standardprogramm auf ihren Computern enthalten ist, und sie befürchten, dass das Löschen den Betrieb des Systems beeinträchtigt Diese Website hilft Benutzern. Schauen wir uns genauer an, wie Skype for Business unter Win10 deinstalliert wird. So deinstallieren Sie Skype for Business unter Win10 1. Klicken Sie auf dem Computerdesktop auf das Windows-Symbol und dann zum Aufrufen auf das Einstellungssymbol. 2. Klicken Sie auf „Übernehmen“. 3. Geben Sie „Skype“ in das Suchfeld ein und klicken Sie, um das gefundene Ergebnis auszuwählen. 4. Klicken Sie auf „Deinstallieren“. 5

Wie man for verwendet, um die Fakultät von n in JavaScript zu finden Wie man for verwendet, um die Fakultät von n in JavaScript zu finden Dec 08, 2021 pm 06:04 PM

So verwenden Sie for, um n Fakultäten zu finden: 1. Verwenden Sie die Anweisung „for (var i=1;i<=n;i++){}“, um den Schleifendurchlaufbereich auf „1~n“ zu steuern. 2. In der Schleife Körper, verwenden Sie „cj *=i“. Multiplizieren Sie die Zahlen von 1 bis n und weisen Sie das Produkt der Variablen cj 3 zu. Nach dem Ende der Schleife ist der Wert der Variablen cj die Fakultät von n und wird dann ausgegeben.

Was ist der Unterschied zwischen foreach und for-Schleife? Was ist der Unterschied zwischen foreach und for-Schleife? Jan 05, 2023 pm 04:26 PM

Unterschiede: 1. for durchläuft jedes Datenelement über den Index, während forEach die Datenelemente des Arrays über das zugrunde liegende JS-Programm durchläuft. 2. for kann die Ausführung der Schleife über das Schlüsselwort break beenden, forEach jedoch nicht . for kann die Ausführung der Schleife steuern, indem es den Wert der Schleifenvariablen steuert, forEach jedoch nicht. 4. for kann Schleifenvariablen außerhalb der Schleife aufrufen, forEach kann jedoch keine Schleifenvariablen außerhalb der Schleife aufrufen ist höher als forEach.

Was sind die gängigen Flusskontrollstrukturen in Python? Was sind die gängigen Flusskontrollstrukturen in Python? Jan 20, 2024 am 08:17 AM

Was sind die gängigen Flusskontrollstrukturen in Python? In Python ist die Flusskontrollstruktur ein wichtiges Werkzeug zur Bestimmung der Ausführungsreihenfolge des Programms. Sie ermöglichen es uns, verschiedene Codeblöcke basierend auf unterschiedlichen Bedingungen auszuführen oder einen Codeblock wiederholt auszuführen. Im Folgenden werden gängige Prozesssteuerungsstrukturen in Python vorgestellt und entsprechende Codebeispiele bereitgestellt. Bedingte Anweisungen (if-else): Bedingte Anweisungen ermöglichen es uns, verschiedene Codeblöcke basierend auf unterschiedlichen Bedingungen auszuführen. Die grundlegende Syntax lautet: if Bedingung 1: #when Bedingung

Wie vermeide ich Ausnahmen in einfachen for-Schleifen in JAVA? Wie vermeide ich Ausnahmen in einfachen for-Schleifen in JAVA? Apr 26, 2023 pm 12:58 PM

Einleitung Bei der tatsächlichen Geschäftsprojektentwicklung sollte jeder mit dem Vorgang des Entfernens von Elementen, die die Bedingungen nicht erfüllen, aus einer bestimmten Liste vertraut sein, oder? Vielen Schülern fallen sofort viele Wege ein, um dies zu erreichen, aber sind alle Wege, die Ihnen einfallen, für Mensch und Tier harmlos? Viele scheinbar normale Vorgänge sind in Wirklichkeit Fallen, und viele Anfänger könnten in sie tappen, wenn sie nicht vorsichtig sind. Wenn beim Ausführen des Codes leider eine Ausnahme ausgelöst und ein Fehler gemeldet wird, ist dies ein Segen. Zumindest kann der Code rechtzeitig erkannt und gelöst werden, ohne dass ein Fehler gemeldet wird, aber in der Geschäftslogik treten verschiedene seltsame Probleme auf Das ist noch tragischer, denn wenn man diesem Problem keine Beachtung schenkt, kann es zu versteckten Gefahren für das spätere Geschäft kommen. Was sind also die Implementierungsmethoden? Welche Implementierungen könnten

6 Beispiele, 8 Codeausschnitte, ausführliche Erklärung der For-Schleife in Python 6 Beispiele, 8 Codeausschnitte, ausführliche Erklärung der For-Schleife in Python Apr 11, 2023 pm 07:43 PM

Python unterstützt For-Schleifen und seine Syntax unterscheidet sich geringfügig von anderen Sprachen (wie JavaScript oder Java). Der folgende Codeblock zeigt, wie Sie eine for-Schleife in Python verwenden, um die Elemente in einer Liste zu durchlaufen: Der obige Codeausschnitt gibt drei Buchstaben in separaten Zeilen aus. Sie können die Ausgabe auf dieselbe Zeile beschränken, indem Sie nach der Druckanweisung ein Komma „“ hinzufügen (wenn viele zu druckende Zeichen angegeben sind, wird sie „zeilenumbrochen“). Der Code lautet wie folgt: Wenn Sie möchten Anzeige in einer Zeile statt in mehreren Zeilen. Für Textinhalte können Sie die obige Codeform verwenden. Python bietet auch integrierte Funktionen

Verwenden Sie die for-Schleife der Go-Sprache, um die Flip-Funktion schnell zu implementieren Verwenden Sie die for-Schleife der Go-Sprache, um die Flip-Funktion schnell zu implementieren Mar 25, 2024 am 10:45 AM

Die Implementierung der Flip-Funktion mit der Go-Sprache kann sehr schnell über eine for-Schleife implementiert werden. Die Flip-Funktion dient dazu, die Reihenfolge der Elemente in einer Zeichenfolge oder einem Array umzukehren, und kann in vielen Szenarien angewendet werden, z. B. beim Umdrehen von Zeichenfolgen, Umdrehen von Array-Elementen usw. Schauen wir uns an, wie Sie mit der for-Schleife der Go-Sprache die Flip-Funktion von Zeichenfolgen und Arrays realisieren und spezifische Codebeispiele anhängen. String-Umdrehen: packagemainimport("fmt")fun

See all articles