Table des matières
Objet itérable (Objet itérable)
Symbol.iterator
把对象本身构造成迭代器
String也是可迭代的
String的迭代器
类数组对象和可迭代对象
Array.from
总结
Maison interface Web js tutoriel Explication détaillée des principes d'implémentation des tableaux de classes JavaScript et des objets itérables

Explication détaillée des principes d'implémentation des tableaux de classes JavaScript et des objets itérables

Jun 09, 2022 am 11:37 AM
javascript

Cet article vous apporte des connaissances pertinentes sur javascript, qui présente principalement les principes d'implémentation des objets de type tableau et itérables, y compris la construction de l'objet lui-même en itérateurs, itérateurs de chaîne, etc., jetons un coup d'œil ci-dessous, j'espère cela sera utile à tout le monde.

Explication détaillée des principes d'implémentation des tableaux de classes JavaScript et des objets itérables

[Recommandations associées : Tutoriel vidéo javascript, front-end web]

Objet itérable (Objet itérable)

Un tableau est un objet spécial, et sa différence avec les objets ordinaires n'est pas seulement l'ordre d'éléments.accès, rangement. Une autre différence importante est que les tableaux sont itérables, c'est-à-dire que vous pouvez utiliser l'instruction for ... of pour accéder (itérer) à tous les éléments. for ... of语句访问(迭代)所有的元素。

我们可以简单的做一个小实验:

let arr = [1,2,3,4,5]for(let val of arr){
    console.log(val)}
Copier après la connexion

代码执行结果:

Explication détaillée des principes dimplémentation des tableaux de classes JavaScript et des objets itérables

以上代码就简单的使用了数组的迭代特性,我们在访问数组元素的时候,不必使用元素的下标。

如果我们对一个普通对象使用for ... of语句会发生什么呢?

let obj = {
    name:'xiaoming',
    age:12,}for(let para of obj){ //代码会报错
    console.log(para)}
Copier après la connexion

执行效果如下:

Explication détaillée des principes dimplémentation des tableaux de classes JavaScript et des objets itérables

这就证明普通的对象和数组之间还有一个可迭代的差距,我们称具备迭代功能的对象为可迭代对象

Symbol.iterator

如果我们希望一个对象可以迭代,必须为对象添加一个名为Symbol.iterator的方法(一个专门使对象可迭代的内建Symbol)。

方法作用包括:

  1. 当使用for ... of循环迭代对象时,就会调用Symbol.iterator方法,这个方法必须返回一个迭代器(一个有next()方法的对象)。
  2. 得到迭代器后,for ... of会不断的调用迭代器的next()方法获得下一个元素。
  3. next()方法返回的内容必须符合格式:{done:Boolean,value:any},当done:true时,循环结束,否则value就是下一个值。

迭代器:

迭代器是借鉴C++等语言的概念,迭代器的原理就像指针一样,它指向数据集合中的某个元素,你可以获取它指向的元素,也可以移动它以获取其它元素。迭代器类似于数组中下标的拓展,各种数据结构,如链表(List)、集合(Set)、映射(Map)都有与之对应的迭代器。

JS中的迭代器是专门为了遍历这一操作设计的。每次获取到的迭代器总是初始指向第一个元素,并且迭代器只有next()一种行为,直到获取到数据集的最后一个元素。我们无法灵活移动迭代器的位置,所以,迭代器的任务,是按某种次序遍历数据集中的元素

实现一个可迭代对象:

let obj = {
    from:1,
    to:5,}obj[Symbol.iterator] = function(){
    //返回一个迭代器
    return {
        current:this.from,
        last:this.to,
        next(){
            if(this.current<this.last><p>代码执行效果:</p>
<p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/067/05759c456d9c107fab3194b506d39378-4.png" class="lazy" alt="Explication détaillée des principes dimplémentation des tableaux de classes JavaScript et des objets itérables"></p>
<p>注意,以上对象虽然可以进行迭代了,但是,迭代使用使用的材料并非对象,而是<code>Symbol.iterator</code>返回的迭代器(也是一个对象)。</p>
<h2 id="把对象本身构造成迭代器">把对象本身构造成迭代器</h2>
<p>以上代码构造了一个内建函数<code>Symbol.iterator()</code>,这个函数返回了一个迭代器对象。我们还可以采用另外一种实现迭代器的方式:把对象本身做成迭代器:</p>
<pre class="brush:php;toolbar:false">let obj = {
    from:1,
    to:5,
    [Symbol.iterator](){
        this.current = this.from;
        return this;//返回对象本身
    },
    next(){//给对象添加一个next方法
        if(this.current<this.to><p>代码执行效果和上面的图片展示相同。</p>
<blockquote><p>这么做虽然代码更加简洁了,但是由于并没有新的可迭代对象产生,我们就没有办法同时执行两个<code>for ... of</code>循环迭代同一个对象了,但是两个并行的迭代在同一个对象上是非常罕见的。</p></blockquote>
<p>我们可以总结可迭代对象的概念:</p>
<p>所谓可迭代对象,就是比普通对象多了一个名为<code>Symbol.iterator</code>方法的普通对象,这个方法返回一个迭代器。</p>
<p>或者,一个具备<code>Symbol.iterator</code>同时具备<code>next</code>方法的对象也是一个可迭代的对象。</p>
<h2 id="String也是可迭代的">String也是可迭代的</h2>
<p>数组和字符串都是可以迭代的,我们可以很方便的使用<code>for...of</code></p>Nous pouvons simplement faire une petite expérience : 🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">let str = '123'for(let c of str){
    console.log(c)}
Copier après la connexion
Copier après la connexion
🎜Résultat de l'exécution du code : 🎜🎜Explication détaillée des principes dimplémentation des tableaux de classes JavaScript et des objets itérables🎜🎜Le code ci-dessus utilise simplement la fonction d'itération du tableau. Lorsque nous accédons aux éléments du tableau, nous n'avons pas besoin d'utiliser l'indice de l'élément. 🎜🎜Que se passera-t-il si nous utilisons l'instruction for ... of sur un objet normal ? 🎜
let str = '...'for(let c of str){
    console.log(c)}
Copier après la connexion
Copier après la connexion
🎜The execution effect is as follows: 🎜🎜Explication détaillée des principes dimplémentation des tableaux de classes JavaScript et des objets itérables 🎜 🎜Cela prouve qu'il existe un écart itérable entre les objets ordinaires et les tableaux. Nous appelons les objets avec des fonctions itératives Objets itérables. 🎜🎜Symbol.iterator🎜🎜Si nous voulons qu'un objet soit itérable, nous devons ajouter une méthode nommée Symbol.iterator à l'objet (un Symbol intégré qui spécifiquement rend les objets code itérable>). 🎜🎜Les fonctions de la méthode incluent : 🎜
  1. Lors de l'utilisation de la boucle for ... of pour itérer un objet, la méthode Symbol.iterator sera appelée. Cette méthode doit renvoyer un Iterator (un objet avec une méthode next()).
  2. Après avoir obtenu l'itérateur, for ... of appellera continuellement la méthode next() de l'itérateur pour obtenir l'élément suivant.
  3. Le contenu renvoyé par la méthode next() doit être conforme au format : {done:Boolean,value:any}, lorsque done:true, la boucle se termine, sinon <code>value est la valeur suivante.
🎜Itérateur : 🎜🎜Itérateur est un concept emprunté à des langages tels que le C++. Le principe d'un itérateur est comme un pointeur, qui pointe. à un certain point de l'élément de collecte de données, vous pouvez obtenir l'élément vers lequel il pointe ou vous pouvez le déplacer pour obtenir d'autres éléments. Les itérateurs sont similaires au développement d'indices dans des tableaux, de diverses structures de données, telles que des listes chaînées (List), des ensembles (Set), des cartes (Map code> ) ont des itérateurs correspondants. 🎜🎜L'itérateur en <code>JS est spécialement conçu pour le fonctionnement du traversal. L'itérateur obtenu à chaque fois pointe toujours initialement vers le premier élément, et l'itérateur n'a qu'un seul comportement : next() jusqu'à ce que le dernier élément de l'ensemble de données soit obtenu. Nous ne pouvons pas déplacer de manière flexible la position de l'itérateur, donc la tâche de l'itérateur est de parcourir les éléments de l'ensemble de données dans un certain ordre. 🎜
🎜Implémenter un objet itérable : 🎜
let str = '12345'let itr = str[Symbol.iterator]()while(true){
    let result = itr.next()
    if(result.done)break;
    console.log(result.value)}
Copier après la connexion
Copier après la connexion
🎜Effet d'exécution de code : 🎜🎜Explication détaillée des principes dimplémentation des tableaux de classes JavaScript et des objets itérables🎜🎜Notez que bien que les objets ci-dessus puissent être itérés, le matériau utilisé pour l'itération n'est pas l'objet, mais l'itérateur renvoyé par Symbol.iterator ( est également un objet). 🎜🎜Construisez l'objet lui-même en un itérateur🎜🎜Le code ci-dessus construit une fonction intégrée Symbol.iterator(), qui renvoie un objet itérateur. Nous pouvons également utiliser une autre façon d'implémenter les itérateurs : faire de l'objet lui-même un itérateur : 🎜
let str = '123'let arr = Array.from(str)console.log(arr)
Copier après la connexion
Copier après la connexion
🎜L'effet d'exécution du code est le même que l'image ci-dessus. 🎜
🎜Bien que le code soit plus concis en faisant cela, puisqu'aucun nouvel objet itérable n'est généré, nous ne pouvons pas exécuter deux boucles for...of en même temps pour itérer le même objet. , mais deux itérations parallèles sur le même objet sont très rares. 🎜
🎜Nous pouvons résumer le concept d'objets itérables : 🎜🎜Les objets dits itérables sont des objets ordinaires avec une méthode nommée Symbol.iterator de plus que les objets ordinaires. Cette méthode renvoie un itérateur. . 🎜🎜Ou, un objet avec la méthode Symbol.iterator et next est également un objet itérable. 🎜🎜La chaîne est également itérable🎜🎜Les tableaux et les chaînes peuvent être itérés. Nous pouvons facilement utiliser l'instruction for...of pour itérer les éléments de caractère du tableau : 🎜
let str = '123'for(let c of str){
    console.log(c)}
Copier après la connexion

这对于代理对(UTF-16扩展字符)同样是有效的:

let str = '...'for(let c of str){
    console.log(c)}
Copier après la connexion
Copier après la connexion

执行效果如下:

Explication détaillée des principes dimplémentation des tableaux de classes JavaScript et des objets itérables

String的迭代器

并非只有for...of语句能够使用迭代器,我们还可以显式的调用迭代器:

let str = '12345'let itr = str[Symbol.iterator]()while(true){
    let result = itr.next()
    if(result.done)break;
    console.log(result.value)}
Copier après la connexion
Copier après la connexion

代码执行效果:

Explication détaillée des principes dimplémentation des tableaux de classes JavaScript et des objets itérables

以上代码执行了遍历字符串字符的操作,是不是觉得可迭代对象就没有这么神秘了!

类数组对象和可迭代对象

类数组和可迭代在遍历功能上非常相似,都可以方便的方式内部元素,但是二者仍然有明显的区别:

  1. iterable可迭代对象:实现了Symbol.iterator的对象;
  2. array-like类数组对象:具有数字索引,并且有length属性;

字符串就是一个即使类数组又是可迭代的对象。

可迭代和类数组对象通常都不是数组,如果我们想把一个可迭代或者类数组对象转为数组,需要使用Array.from方法。

Array.from

使用Array.from将字符串转为数组:

let str = '123'let arr = Array.from(str)console.log(arr)
Copier après la connexion
Copier après la connexion

代码执行效果如下:

Explication détaillée des principes dimplémentation des tableaux de classes JavaScript et des objets itérables

把自定义的类数组对象转为数组:

let obj = {
    0:'0',
    1:'1',
    2:'2',
    length:3}let arr = Array.from(obj)console.log(arr)
Copier après la connexion

代码执行结果:

Explication détaillée des principes dimplémentation des tableaux de classes JavaScript et des objets itérables

Array.from的完整语法:

Array.from(obj[, mapFunc, thisArg])
Copier après la connexion

mapFunc方法会在生成数组之前对每个可迭代或类数组元素调用,如果mapFunc是一个成员方法,可以使用thisArg提供this指针。

举个例子:

let str = '12345'let arr = Array.from(str,itm=>+itm)console.log(arr)
Copier après la connexion

代码执行结果:

Explication détaillée des principes dimplémentation des tableaux de classes JavaScript et des objets itérables

这里通过映射函数,将本应该生成字符数组转为数字数组。

总结

  1. 可以使用for...of语法的对象被称为可迭代对象
  2. 可迭代对象是在普通对象的基础上实现了Symbol.iterator方法的对象
  3. Symbol.iterator方法返回了一个迭代器;
  4. 迭代器包含一个next方法,该方法返回下一个元素的值;
  5. next方法返回值需要满足格式{done:Boolean,value:nextVal},当done:true时,迭代结束
  6. Array.from可以把类数组和可迭代对象转为数组;

【相关推荐:javascript视频教程web前端

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment mettre en œuvre un système de reconnaissance vocale en ligne à l'aide de WebSocket et JavaScript Comment mettre en œuvre un système de reconnaissance vocale en ligne à l'aide de WebSocket et JavaScript Dec 17, 2023 pm 02:54 PM

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de reconnaissance vocale en ligne Introduction : Avec le développement continu de la technologie, la technologie de reconnaissance vocale est devenue une partie importante du domaine de l'intelligence artificielle. Le système de reconnaissance vocale en ligne basé sur WebSocket et JavaScript présente les caractéristiques d'une faible latence, d'un temps réel et d'une multiplateforme, et est devenu une solution largement utilisée. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de reconnaissance vocale en ligne.

WebSocket et JavaScript : technologies clés pour mettre en œuvre des systèmes de surveillance en temps réel WebSocket et JavaScript : technologies clés pour mettre en œuvre des systèmes de surveillance en temps réel Dec 17, 2023 pm 05:30 PM

WebSocket et JavaScript : technologies clés pour réaliser des systèmes de surveillance en temps réel Introduction : Avec le développement rapide de la technologie Internet, les systèmes de surveillance en temps réel ont été largement utilisés dans divers domaines. L'une des technologies clés pour réaliser une surveillance en temps réel est la combinaison de WebSocket et de JavaScript. Cet article présentera l'application de WebSocket et JavaScript dans les systèmes de surveillance en temps réel, donnera des exemples de code et expliquera leurs principes de mise en œuvre en détail. 1. Technologie WebSocket

Comment utiliser JavaScript et WebSocket pour mettre en œuvre un système de commande en ligne en temps réel Comment utiliser JavaScript et WebSocket pour mettre en œuvre un système de commande en ligne en temps réel Dec 17, 2023 pm 12:09 PM

Introduction à l'utilisation de JavaScript et de WebSocket pour mettre en œuvre un système de commande en ligne en temps réel : avec la popularité d'Internet et les progrès de la technologie, de plus en plus de restaurants ont commencé à proposer des services de commande en ligne. Afin de mettre en œuvre un système de commande en ligne en temps réel, nous pouvons utiliser les technologies JavaScript et WebSocket. WebSocket est un protocole de communication full-duplex basé sur le protocole TCP, qui peut réaliser une communication bidirectionnelle en temps réel entre le client et le serveur. Dans le système de commande en ligne en temps réel, lorsque l'utilisateur sélectionne des plats et passe une commande

Comment mettre en œuvre un système de réservation en ligne à l'aide de WebSocket et JavaScript Comment mettre en œuvre un système de réservation en ligne à l'aide de WebSocket et JavaScript Dec 17, 2023 am 09:39 AM

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de réservation en ligne. À l'ère numérique d'aujourd'hui, de plus en plus d'entreprises et de services doivent fournir des fonctions de réservation en ligne. Il est crucial de mettre en place un système de réservation en ligne efficace et en temps réel. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de réservation en ligne et fournit des exemples de code spécifiques. 1. Qu'est-ce que WebSocket ? WebSocket est une méthode full-duplex sur une seule connexion TCP.

JavaScript et WebSocket : créer un système efficace de prévisions météorologiques en temps réel JavaScript et WebSocket : créer un système efficace de prévisions météorologiques en temps réel Dec 17, 2023 pm 05:13 PM

JavaScript et WebSocket : Construire un système efficace de prévisions météorologiques en temps réel Introduction : Aujourd'hui, la précision des prévisions météorologiques revêt une grande importance pour la vie quotidienne et la prise de décision. À mesure que la technologie évolue, nous pouvons fournir des prévisions météorologiques plus précises et plus fiables en obtenant des données météorologiques en temps réel. Dans cet article, nous apprendrons comment utiliser la technologie JavaScript et WebSocket pour créer un système efficace de prévisions météorologiques en temps réel. Cet article démontrera le processus de mise en œuvre à travers des exemples de code spécifiques. Nous

Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Jan 05, 2024 pm 06:08 PM

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

Comment utiliser insertBefore en javascript Comment utiliser insertBefore en javascript Nov 24, 2023 am 11:56 AM

Utilisation : En JavaScript, la méthode insertBefore() est utilisée pour insérer un nouveau nœud dans l'arborescence DOM. Cette méthode nécessite deux paramètres : le nouveau nœud à insérer et le nœud de référence (c'est-à-dire le nœud où le nouveau nœud sera inséré).

JavaScript et WebSocket : créer un système de traitement d'images en temps réel efficace JavaScript et WebSocket : créer un système de traitement d'images en temps réel efficace Dec 17, 2023 am 08:41 AM

JavaScript est un langage de programmation largement utilisé dans le développement Web, tandis que WebSocket est un protocole réseau utilisé pour la communication en temps réel. En combinant les puissantes fonctions des deux, nous pouvons créer un système efficace de traitement d’images en temps réel. Cet article présentera comment implémenter ce système à l'aide de JavaScript et WebSocket, et fournira des exemples de code spécifiques. Tout d’abord, nous devons clarifier les exigences et les objectifs du système de traitement d’images en temps réel. Supposons que nous disposions d'un appareil photo capable de collecter des données d'image en temps réel.

See all articles