Questions d'entrevue JavaScript - Entretien de codage 2022 | Oleksandr Kocherhin | Skillshare

Vitesse de lecture


1.0x


  • 0.5x
  • 0.75x
  • 1 x (normale)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Questions d'entrevue JavaScript - Entretien de codage 2022

teacher avatar Oleksandr Kocherhin

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 1.

      Introduction

      0:54

    • 2.

      Types d'entretiens

      1:30

    • 3.

      Entretien et travail sont des choses complètement différentes

      1:01

    • 4.

      Mapper des utilisateurs pour obtenir des noms d'utilisateur

      9:41

    • 5.

      Différence entre nulle et non définie

      2:36

    • 6.

      Levage

      4:45

    • 7.

      Fermetures

      6:04

    • 8.

      Mauvaise

      12:58

    • 9.

      Ajouter des éléments au tableau

      4:06

    • 10.

      Tableaux de concaténation

      3:06

    • 11.

      Vérifiez si un utilisateur possédant un tel nom existe

      4:25

    • 12.

      Supprimer tous les doublons dans le tableau

      4:29

    • 13.

      Trier le tableau

      4:07

    • 14.

      L'entrevue n'est pas ce que vous pensez

      2:12

    • 15.

      Fonction de plage d'écriture

      3:09

    • 16.

      Fonction Shuffle d'écriture

      3:19

    • 17.

      Trouvez le nombre de situations de valeur minimale dans la liste

      2:35

    • 18.

      Cela

      5:33

    • 19.

      Cours

      5:09

    • 20.

      Prototypes

      7:04

    • 21.

      J'ai échoué l'entrevue. Et ensuite ?

      2:19

    • 22.

      Modules

      9:41

    • 23.

      Implémenter la fonction de débarquement

      5:37

    • 24.

      Implémenter la fonction des papilles

      4:19

    • 25.

      Mettez en valeur tous les mots de plus de 8 Chars avec du jaune

      3:52

    • 26.

      Ajouter un lien

      1:32

    • 27.

      Diviser chaque phrase en une ligne séparée

      4:28

    • 28.

      Délégation d'événements

      3:58

    • 29.

      Demande HTTP Xml

      3:11

    • 30.

      Fetch API

      2:14

    • 31.

      Rappel de base

      3:04

    • 32.

      Réseau Async

      5:53

    • 33.

      Convertir le Callback en promesse

      2:51

    • 34.

      Données de carte dans les promesses

      6:58

    • 35.

      Réécrire des données de cartographie dans Async Await

      3:14

    • 36.

      Vous devez utiliser un vocabulaire correct

      1:04

    • 37.

      Gestionnaire de demandes de conception

      6:39

    • 38.

      Mettre en œuvre une comparaison peu profonde

      8:12

    • 39.

      Implémenter une comparaison approfondie

      2:58

    • 40.

      Créer une fonction de mémorisation

      3:45

    • 41.

      Fibonacci

      3:15

    • 42.

      Palindrome

      1:27

    • 43.

      Anagramme

      3:36

    • 44.

      Trouver des voyelles

      2:42

    • 45.

      Convertir en cas de titre

      5:38

    • 46.

      Convertir l'entrée dans le temps donnée en 12 heures en format 24

      7:37

    • 47.

      Mappage de données

      4:55

    • 48.

      Remplacer les paramètres dans l'URL

      4:49

    • 49.

      Messages de validation

      4:46

    • 50.

      Liste imbriquée

      9:45

    • 51.

      Exercice

      0:47

  • --
  • Niveau débutant
  • Niveau intermédiaire
  • Niveau avancé
  • Tous niveaux

Généré par la communauté

Le niveau est déterminé par l'opinion majoritaire des apprenants qui ont évalué ce cours. La recommandation de l'enseignant est affichée jusqu'à ce qu'au moins 5 réponses d'apprenants soient collectées.

96

apprenants

--

projets

À propos de ce cours

Ce cours est une excellente préparation pour toute entrevue de programmation en javascript que vous avez peut-être apparue. Les entrevues de programmation ont besoin de beaucoup de connaissances, mais la meilleure façon de se préparer aux entrevues est beaucoup de pratique ! Dans ce cours, vous allez compléter 59 questions d'entrevue en javascript issues de vrais entrevues en javascript. Il n'y a pas d'extraits que personne ne demande ici. Dans chaque question nous allons commencer par une tâche, puis vous essaierez de résoudre chaque problème vous-même, puis je vous montrerai différentes solutions à chaque problème étape par étape pour différents niveaux de programmeurs. Nous allons nous lancer dans les compétences, les concepts et les techniques nécessaires pour résoudre chaque problème.

Lorsque vous aurez terminé ce cours, vous aurez maîtrisé les 59 questions d'entrevue que nous allons couvrir, mais vous aurez également appris les concepts, les compétences et les techniques nécessaires pour vous exceller dans toute autre question d'entrevue que vous pourriez vous poser. Vous vous sentirez très confiant d'entrer dans toutes les entrevues de programmation javascript que vous aurez En outre, vous renforcerez vos compétences en programmation javascript et vos bases de javascript dans l'ensemble.

Sujets fondamentaux du cours :

  • Fermetures

  • Levage

  • Mauvaise

  • Cours et prototypes

  • Modules

  • Travailler avec le DOM

  • Javascript Asyncronous (Callback, promesses, Async attend)

  • Memoization

  • Transformer des données avec des tâches du monde réel

  • Créer des fonctions utilitaires propres

Rencontrez votre enseignant·e

Teacher Profile Image

Oleksandr Kocherhin

Enseignant·e

I am a full-stack developer with a passion for learning and teaching what I know. I have been programming for around 10 years and teaching for almost 6 years.

I believe in learning through doing and this philosophy is present in every course that I teach. I love exploring new web & mobile technologies and my courses focus on giving you the edge in our fast-moving industry.

Voir le profil complet

Level: Beginner

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

Transcription

1. Introduction: Bienvenue dans mon cours, questions d'entretien JavaScript avec des tâches pratiques. Dans ce cours, nous allons résoudre ensemble 59 questions d' entrevue les plus populaires qu' leur a posées ou qu'on leur a posées au cours des dix dernières années, et elles couvriront toute la connaissance du JavaScript. Ce cours est entièrement axé sur les tâches de coordination. C'est pourquoi je vous recommande vivement d'essayer de mettre en œuvre chaque tâche par vous-même. abord, après cela, nous allons le mettre en œuvre ensemble différentes manières pour différents niveaux de connaissances. À la fin de ce cours, vous serez bien mieux préparé pour votre entretien JavaScript afin de trouver un emploi. Qui suis-je ? Je m'appelle Alexander Cohered Hint, et je suis développeur web, eu plus de dix ans d'expérience. Il est également un instructeur professionnel avec divers cours sur les technologies Web. J'ai fait de mon mieux pour mettre toutes mes connaissances dans ce cours et je voulais les partager avec vous. Bienvenue à bord et commençons. 2. Types d'entretiens: Il existe trois types d' entretiens différents que vous pourriez obtenir. Tout d'abord, c'est un parent théorique. On vient de vous poser quelques questions concernant votre travail et votre expérience, etc. C'est un type d'entretien normal pour les développeurs plus avancés où ils ont déjà beaucoup d'années d' expérience parce que l' intervieweur comprend, d'accord, ce type travaillait dans le développement web, par exemple, avec JavaScript depuis cinq ans, ce qui signifie en fait qu'il a assez de connaissances et qu'il n'a aucun sens de vérifier ses compétences en programmation. Le deuxième type d' entretien populaire est l' entretien coordonné. En fait, je dirais que c'est le type d'entretien le plus populaire. Les gens ont souvent mélangé entretiens théoriques avec des défis de codage, ce qui signifie que vous recevez des questions théoriques et vous devez ensuite coder quelque chose. Le plus souvent, vous utilisez simplement un stylo et du papier et non un ordinateur. Dans ce cours, nous allons résoudre ensemble 59 défis JavaScript différents que vous pouvez relever. Ces défis sont couverts dans presque tous les JavaScript qu' il rencontrera lors des entrevues. Et le dernier type d'entretien est l'entrevue d'enregistrement de projet. En règle générale, l'intervieweur voulait voir votre code. Donc, si vous avez quelque chose à montrer, c'est beaucoup plus facile pour vous car vous ne devez pas répondre uniquement à des questions aléatoires, mais vous pouvez parler de votre projet, de votre code, etc. Ce qui signifie en fait que je vous recommande vivement pour l'entretien pour mettre en œuvre un projet, car tout d' abord, vous aurez quelque chose à montrer à l'intervieweur. Deuxièmement, vous aurez quelque chose à parler que vous connaissez au moins. 3. Interview et travail sont complètement différents: Donc, généralement, pour trouver un emploi, vous devez passer un entretien. Et c'est ainsi que cela fonctionne dans presque toutes les entreprises. Mais le principal problème, c'est que votre entretien n'est pas toujours lié à votre travail, ce qui signifie qu'une partie de l'entrevue peut vous être posée difficile, pas des questions réelles, mais vous devez y répondre . pour trouver un emploi, mais vous n' utiliserez jamais ces connaissances plus tard dans votre travail quotidien. Voici le problème. Il y a quelques similitudes entre introduction et travail, mais en fait, elles sont différentes. Et dans le monde parfait, votre entretien doit être le reflet de votre travail réel dans l'entreprise. Mais malheureusement, ce n'est pas toujours comme ça. C'est pourquoi vous devez connaître les deux. Vous devez savoir comment réussir l'entretien et savoir comment travailler. Dans ce cours, la plupart des défis sont connaissances totalement réelles que vous devez connaître et dont vous avez besoin à la fois dans votre entretien et dans la vie quotidienne. Mais il a également inclus dans ce cours quelques questions qui ne sont pas liées à votre programmation quotidienne, mais vous devez les connaître juste pour votre présentation. 4. Mappage des utilisateurs pour obtenir des noms d'utilisateur: La première tâche que nous voulons examiner est de ressembler à ceci. Vous devez écrire un code pour vous débarrasser des noms d'un tableau d'utilisateurs. Et comme vous pouvez le constater ici, nous avons une multitude d'utilisateurs. En fait, il ne s'agit que d'un ensemble d'objets. Nous voyons ce nom et cette propriété active. Et en fait, c'est une tâche relativement facile, mais c'est vraiment agréable de commencer l'entretien. Et les intervieweurs expérimentés sauront que vous êtes stressé, ce qui signifie que vous devez recevoir plusieurs exercices faciles juste pour que vous vous détendiez un peu et que vous puissiez être plus concentré et plus productif. Et en fait, même un exercice facile peut dire beaucoup à l' interview quel style de code vous utilisez, comment nommez-vous vos variables et comment vous écrivez votre code afin qu'il puisse comprendre à quel niveau vous et quelles questions il doit vous poser ? Je vous recommande donc vivement de poster cette vidéo et d'essayer de l' implémenter vous-même. Si vous voulez simplement suivre , codons ceci. En fait, il existe plusieurs façons de le mettre en œuvre. Normalement, les débutants vont commencer par la boucle for car c'est l' approche la plus simple qu'ils connaissent. Par exemple, après notre troisième utilisateur, nous pouvons écrire ici pour la boucle. Nous avons donc ici pour laisser index de zéro à l'inclinaison de l'utilisateur. Nous avons donc ici une longueur inférieure à celle de l'utilisateur et nous en avons huit plus. Maintenant, dans notre boucle for, nous voulons accéder à chaque nom et le pousser dans une certaine gloire. C'est pourquoi, avant de créer un tableau, nommons le tableau et il s'agit d'un tableau vide. Maintenant, à l'intérieur d'une boucle for, nous pouvons écrire des noms à la sortie et ici à l'intérieur de l' accès chez nos utilisateurs avec j'ai vu que c'est notre nom de point utilisateur actuel. Dans ce cas, nous mettons un nom en ligne de cet utilisateur dans ce droit. Et après notre boucle for, nous pouvons juste console.log dans vos noms et le vérifier et le parcourir. Je suis lié à la page et comme vous pouvez le constater, notre résultat est Chegg. John Mike C'est exactement ce que nous devons mettre en œuvre et oui, nous avons résolu notre tâche. Et si vous êtes débutant, cette solution est tout à fait parfaite. Mais vous pouvez faire mieux car chaque fois que vous essayez de mieux coder une interview, vous démontrez que vous êtes un meilleur développeur. C'est pourquoi. Venons dire ce code et réessayer. Donc, ce que nous pouvons utiliser ici au lieu de la boucle, c'est pour une fonction riche pour notre tableau. C'est ici que nous pouvons simplement écrire les utilisateurs points pour riches et à l'intérieur, nous devons fournir une fonction de rappel. Ce qui est plus important, nous avons accès ici à chaque utilisation et maintenant à l'intérieur d'un peut faire ce que nous voulons. Et comme vous pouvez le constater ici, nous n'avons pas d'index et notre code est bien meilleur. Donc, ce que nous voulons faire ici est exactement la même chose que nous l'avons fait auparavant. Nous avons créé ici dans les vrais noms et maintenant à l'intérieur de notre boucle pour chaque boucle, nous voulons pousser à l'intérieur de nos noms, notre nom de point d'utilisateur. Et comme vous pouvez le constater par rapport à notre ancien code, ce code est beaucoup plus facile à lire. Voyons un peu commun ici notre console.log et vérifiez si cela fonctionne. Comme vous pouvez le constater, nous obtenons exactement le même résultat. C'est donc votre niveau deux d'écriture dans du code, mais la meilleure façon de résoudre cette tâche consiste à utiliser une fonction de carte supplémentaire. Et en fait, cela rendra votre code le plus simple simplement parce que vous utilisez le bon outil pour la bonne tâche. Dans ce cas, nous pouvons écrire que nous voulons récupérer notre tableau de noms et ici nous voulons parcourir nos utilisateurs en boucle avec la fonction de carte. Et si vous ne savez pas ce que la carte fonctionne bien, parcourez chaque élément notre tableau et renverrez certaines de vos données pour chaque élément nos clés au lieu de notre objet, nous voulons renvoyer un seul nom. C'est là où ? Ici, nous pouvons écrire que nous avons un utilisateur et que nous voulons renvoyer son nom de point d'utilisateur. Nous allons vérifier si ça fonctionne. Comme vous pouvez le voir dans le navigateur, nous obtenons exactement la même sortie. Mais c'est la meilleure variante pour cette tâche et cela montre que vous savez que ce que vous faites pour solution est presque toujours de faible niveau, qui signifie que vous devez exactement mettre en œuvre ce que vous faites. sont en train de faire. Dans ce cas, nous devons dire que nous poussons éléments vers nos nouveaux noms de tableaux. Et ce que vous pouvez voir ici, nous avons créé un tableau de noms avant d'utiliser for loop, ce qui signifie que notre logique et notre variable supplémentaire n' ont rien ensemble. Dans notre cas, nous écrivons le résultat directement dans nos nouveaux noms de variables. Vous avez donc résolu cette tâche avec succès et maintenant vous obtenez la suivante. Nous devons revenir sur les utilisateurs actifs, ce qui signifie que notre premier point est valable, mais il doit s'agir de tous les utilisateurs actifs. Et en fait, nous pourrions utiliser n'importe quelle méthode que nous voulons ici pour résoudre ce problème. Par exemple, nous pourrions utiliser ici pour boucle et écrire plus simplement à l'intérieur que si condition. Et nous pouvons vérifier ici si notre utilisateur est actif et si cette propriété est vraie, alors à l'intérieur, nous voulons pousser notre élément à notre. Et vous avez raison. Et comme vous pouvez le voir dans le navigateur, nous n'avons ici que deux utilisateurs car notre dernier utilisateur est inactif. C'est très bien, mais nous avons ici deux problèmes. Tout d'abord, notre code est bas. Deuxièmement, nous mélangeons ici la logique avec des filtres et des éléments et nous les cartographions. Et c'est mauvais car lorsque votre code est plus complexe, il est plus difficile de le diviser. Et en fait, la solution avec chacun sera exactement la même. Mais examinons la solution de cette carte. En fait, ce que nous voulons faire ici. Nous voulons tout d'abord filtrer notre baie de disques et nous intéresser aux utilisateurs actifs. Et après cela, nous voulons appliquer notre carte afin que nous puissions ici même un filtre à points. Et nous avons exactement la même logique que celle que nous avons ici accès à notre utilisateur et nous devons renvoyer ici un prédicat avec vrai ou faux. Dans notre cas, le point utilisateur sera actif, donc si notre utilisateur est actif nous le laisserons à l'intérieur de notre tableau. Dans les deux cas, nous le jetterons et après ce travail, nous appellerons notre carte pour cartographier les noms. Ce qui est important dans ce code ici lorsque vous ne mélangez pas Merkin et ne filtrez pas ensemble, ce qui signifie qu'il est plus facile de prendre en charge ce code. Nous avons maintenant une autre tâche. Vous obtiendrez certains utilisateurs par âge décroissant et, bien sûr, les premières règles sont également mises en place. Ce qui signifie que nous devons tout d'abord trier Ray, puis filtrer notre taux et cartographier nos noms. Et comme vous pouvez le constater ici, en plus, nous obtenons des biens d'âge. C'est notre propriété par laquelle nous allons trier notre tarif. Et en fait, en JavaScript, si vous voulez rechercher quelque chose, vous ne devez utiliser qu'une seule fonction JavaScript et elle n'est pas triée. Vous ne pouvez pas vraiment le faire différemment si vous ne savez pas comment fonctionne une fonction de villégiature. Vous pouvez accéder aux développeurs mozilla orig à cette URL et voici un véritable site prototype. L'idée principale est que sont la fonction de recherche colin sur notre tableau et à l'intérieur, nous passons un comparateur de fonctions avec A et B et, dans notre cas, ce sera le premier utilisateur et deuxième utilisateur, puis le deuxième utilisateur et troisième utilisateur, ce qui signifie qu'il compare les éléments un par un. Et ici, nous devons rendre quelque chose. Comme vous pouvez le voir à l'intérieur, nous pouvons revenir moins un. Si A est inférieur à B A, procéderons à un audit. Maintenant, nous devons en revenir si A est supérieur à B et que nous retournons zéro s'ils sont égaux. Et c'est exactement ce que nous devons faire ici. Donc, dans les trois cas, nous devons écrire le même code, mais dans les deux premières variantes, ce sera plutôt fugly parce qu'en fait, nous devons faire le tri avant notre code ici. Alors commentons notre code ici et nous voulons en appliquer certains et ici nous voulons écrire le tri stocké par l'utilisateur et nous obtenons ici notre comparateur. Nous avons donc ici l'utilisateur un et l'utilisateur deux et nous voulons les comparer par âge. C'est pourquoi nous pouvons écrire ici. âge d'un point est inférieur à celui de l'utilisateur jusqu'à cet âge. Et si c'est vrai , nous avons ici un opérateur ternaire que nous voulons retourner moins un. Dans un autre cas, nous voulons en renvoyer un. Sauvegardons cela et vérifions si cela fonctionne. Je passe au navigateur pour charger la page et on va chercher John et vérifier. Nous allons vérifier le sel sur le dessus. John a 18 ans et Jack a 20 ans, ce qui signifie que nos données sont triées correctement, mais dans ordre décroissant, comme vous pouvez le voir ici, triées par ordre décroissant, ce qui signifie que nous voulons échanger ici et non moins un, mais un, et il y en aura moins un. Vérifions le résultat que nous obtenons, tout d' abord, Jack puis John. Et c'est un tri correct, vous devez également vous rappeler que l'opération de tri en JavaScript mute et tableau. C'est bien ici avec le tri régulier du code et nous n'avons pas attribué notre résultat à une propriété car il fait simplement muter notre tableau d'utilisateurs et ensuite nous faisons d'autres choses avec elle. Mais comme vous pouvez le voir ici, ce code est vraiment séparé de notre boucle complète car nous devons le faire avant nos opérations internes. Commentons maintenant ce code et essayons de l'utiliser avec notre carte et notre filtre. Et ici, c'est beaucoup plus facile à faire car nous voulons simplement que nos utilisateurs appellent le tri des points et ensuite appeler le filtre et la carte. Comme vous pouvez le voir ici, lorsque je suis commenté, c'est vraiment joli. Nous avons ici nos utilisateurs qui faisaient notre tri. Après cela, nous effectuons notre filtrage, puis le mappage. Et tout d'abord, ce code est beaucoup plus facile à lire. Vous avez ici le chaînage et vous obtenez votre résultat dans cette propriété unique. De plus, il est important que nous ne mélangions pas différentes opérations. Premier mot à insérer, puis filtrer, puis cartographier. Et si nous devons ajuster l'un d'entre eux, nous n'avons pas besoin de changer la logique d'une autre. Vérifions si elle fonctionne et envahit la page et que nous obtenons exactement le même résultat. Ainsi, comme vous pouvez le constater, vous pouvez résoudre même la tâche simple de différentes manières. Si vous souhaitez montrer lors de l'entretien que vous êtes un développeur avancé, vous devez utiliser un outil spécifique pour votre tâche spécifique. C'est là que la chaîne de pensée, cartographie et de filtre ici est bien meilleure que l'utilisation de la boucle for. 5. Différence entre null et non défini: Vous pourriez avoir une question comme celle-ci. Que fera la connexion dans le premier exemple et dans le second exemple ? Pour répondre correctement au cisaillement, vous devez comprendre la différence entre null et non défini dans JavaScript. Comme vous pouvez le voir ici, nous avons deux exemples. premier exemple, nous n'avons rien affecté à notre variable, qui signifie que cette variable n' est pas encore définie. C'est pourquoi, lorsque nous consoles consignerons cette variable, elle sera égale, elle sera indéfinie ici après que nous aurons connecté à la console le type de cette variable, le nom du titre est également indéfini. c'est ici que nous avons notre deuxième exemple. Nous sommes à l'intérieur de notre variable deux ont reçu une valeur nulle. Ici, nous sommes la connexion à la console var2. Et vous pouvez comprendre ici que nous avons notre valeur. Maintenant, c'est ce que nous verrons à l'écran. Mais le type de variable deux sera un objet car il n' existe pas de type tel que maintenant, c'est pourquoi le type de variable est un objet. Jetons un coup d'œil à ça. Je suis en train de recharger la page et nous sommes ici indéfinis. C'est notre variable ici. Sa valeur n'est donc pas définie. Si le type d'indéfini est indéfini , il n'est pas défini en tant que chaîne. Maintenant, après ce journal de la console travail et travailler ici, nous obtenons maintenant c'est notre valeur et le type de variable est un objet. Vous devez vraiment distinguer en JavaScript entre null et indéfini. C'est indéfini. Cela signifie que la variable est déclarée, mais que la valeur n'est pas encore affectée à l'intérieur de cette variable. C'est exactement ce que nous avons ici sur la troisième ligne. Et maintenant, en JavaScript, il y a une valeur d'affectation, ce qui signifie qu'il s'agit d'une valeur que nous pouvons attribuer à l'intérieur de la variable. Dans notre cas ici, nous allons maintenant signer à l'intérieur de variable. Et même si vous avez répondu correctement ici, intervieweur peut vous demander, mais quelle est vraiment la différence entre maintenant et alors, définissez-la quand nous devons utiliser maintenant et quand nous devons utiliser indéfini. Et en fait, c'est délicat car normalement dans les langues normales, nous n'avons qu'une seule propriété, ce qui signifie que le vénérable n'existe pas. Par exemple, le bouton Nouveau JavaScript. Nous avons deux choses différentes. Nous ne l'avons pas défini et nous l'avons maintenant. Et en fait, cela dépend vraiment de votre style de code et votre équipe, car vous pouvez utiliser tous les deux dans le projet. Mais par exemple, je préfère toujours utiliser en ligne et essayer d'avoir le moins d'indéfini et le plus possible. Mais évidemment, si vous essayez de trouver une valeur dans le tableau, vous obtiendrez la valeur indéfinie et pas maintenant parce que nous n'avons rien trouvé. Donc, la réponse ici est qu'il est bon de les utiliser tous les deux. n'y a pas vraiment quelque chose de mieux dans l'un ou l'autre. 6. C'est un grillage: Dans l'interview, on vous posera peut-être la question suivante qu'est-ce qui sera enregistré sur la console ici ? Et comme vous pouvez le voir ici, nous avons le journal de la console plein, puis foo est égal à un. Et en fait, c'est une question typique concernant le hissage. Une erreur de hissage signifie que la déclaration de votre variable va s'afficher en haut du fichier. Et c'est ainsi que cela fonctionne en JavaScript lorsque vous utilisez un mot-clé var ou un mot-clé fonction. La question est donc de savoir ce que nous verrons ici, nous avons ici consoles log f2 et f2 est une variable, mais comme vous pouvez le constater, elle n'est pas déclarée. Et sur la deuxième ligne, nous avons foo égal à un. En fait, nous arriverons ici et nous nous rétrécirons. Jetons un coup d'œil à ça. Je recharge la page et nous obtenons que foo n'est pas défini par cela, car oui, la première ligne qui est exécutée est journal de la console et foo n'est pas défini à l'intérieur d'un fichier. C'est pourquoi nous avons cette erreur. Donc, la bonne réponse ici, nous obtiendrons une erreur car foo n'est pas défini. Le principal problème est que vous aurez généralement quelques chances de répondre sur le papier sans utiliser d'ordinateur. Parce que les programmeurs n'utilisent évidemment pas d'ordinateurs tous les jours. C'est pourquoi vous ne pouvez pas vraiment le tester dans un navigateur. Et vous devez comprendre comment tout cela fonctionne à l'avance. Après un transfert correct, vous demandera probablement quelque chose comme celui-ci. La question suivante, alors nous allons aller bien, nous sommes connectés à la console ici, mais après cela, nous avons var foo égal à deux. Et en fait ici, c'est l'énorme différence parce que la première question que nous avions ici, f2 est égale à une, mais nous n'avions pas de création de la variable. Mais ici, nous avons var2, qui est en fait une création de la variable. Mais vous pourriez penser, ok, que nous devions arriver après le journal de la console, ce qui signifie que nous obtiendrons toujours une erreur indiquant que foo n'est pas défini parce que Y2 se produit plus tard. Mais en fait, c'est une mauvaise réponse car l'idée principale est que pendant que la déclaration bouillonne en haut du fichier, ce qui signifie qu'il s'agit exactement du même code que ici, var foo, Et ici, nous allons juste assigner f2 à accorder. C'est exactement le même code. C'est ainsi que JavaScript interprète ce code. C'est pourquoi si nous ouvrons un navigateur, vous pouvez voir que nous sommes indéfinis, pourquoi cela se produit, car en fait, nous avons var foo et dans ce cas, nous sommes f2 est indéfini. étant donné que nous n'avons pas attribué de valeur après cela, nous avons un journal de console pour lequel nous avons un journal de console pour nous ne sommes pas définis. Et seulement après cela, nous nous engageons à inciter la forme, ce qui signifie que ce ne sera pas une erreur, ce ne sera pas vrai, il sera indéfini. C'est. Ce processus est appelé hissage. Si vous avez répondu correctement, vous pourriez avoir une autre question concernant le hissage. Comme vous pouvez le voir ici, c'est la troisième question. Nous avons ici plein égal à trois, puis console log foo, puis var foo. Et je pense que vous connaîtrez maintenant la réponse. Oui, nous avons ici pourquoi, et il fait des bulles en haut du fichier, qui signifie en fait que ce fu lointain est exactement comme il est écrit ici, qui signifie que sur la première ligne, nous définissons complètement sur la diapositive suivante où se connecte pied ou trois. Et après ce formulaire de connexion à la console de travail, ce qui signifie qu'il sera égal à trois. Et peu importe que la guerre se déroule à la fin. Il sera bouillonné jusqu'au sommet. Jetons un coup d'œil à ça. Je suis en train de recharger la page et nous trois et c'est exactement ce que nous attendions. Vous pouvez obtenir exactement la même question, mais pas avec les mots, mais avec le mot-clé de fonction, si vous avez quelque part dans votre fonction de code et ensuite le nom de votre fonction, puis à l'intérieur de vous êtes vrai, dans une certaine logique, cette définition spécifique va bouillonner vers le haut, ce qui signifie qu'il n'a pas vraiment importance dans quelle ligne de votre code vous êtes, n'est-ce pas ? Et fonction foo, ce sera la première ligne qui sera exécutée en JavaScript, ce qui signifie en fait si ici avant que j'appelle foo, c'est totalement bien. Comme vous pouvez le voir dans le navigateur, nous ne recevons aucune erreur car cette fonction foo est bouillonnée vers le haut et fonctionne exactement de la même manière que var. Et voici une autre chose importante que vous avez maîtrisée dans votre réponse. Vous devez mentionner que nous pouvons utiliser const et lead, et nous n'avons aucun problème avec eux parce que CONST et plomb et ne bouillonnent pas du tout. Ce qui signifie que si fournir ici const est égal à un, il ne bouillera nulle part. S'il est défini sur la 17e ligne, il existera lors du 17e vol, ce qui signifie que nous n'avons aucun problème avec Constant LED. Et la façon dont JavaScript interprète notre code est exactement la même que nous voyons à l'écran. Vous pouvez donc simplement dire que vous utilisez CONST et que vous dirigez dans chaque projet et que vous n'avez aucun problème avec bouillonnement de la variable ou le hissage. 7. Fermetures: C'est certainement une question qu'ils entendent lors de chaque entretien JavaScript. C'est pourquoi vous devez comprendre les fermetures d'eau. Comme vous pouvez le voir ici, nous avons une tâche créer une fonction de compteur incrément et obtenir des fonctionnalités valides. Et en fait, vous ne l' obtiendrez peut-être pas de cette tâche, mais il s'agit d'une tâche concernant clauses car nous devons créer une fonction dans laquelle l'intérieur restaure une valeur et nous avons deux méthodes publiques. C'est ainsi que vous devez généralement l'implémenter. Nous voulons créer, par exemple, notre fonction de compteur privé. Et c'est privé parce que nous commençons la comptabilité, qui n'est pas disponible à l'extérieur. Et en fait, ce n' est qu'une fonction. Mais si vous entendez lors des entretiens que vous devez ou quelque chose d' intérieur, après avoir appelé cette fonction, vous avez une question concernant la fermeture. Ce que nous voulons faire ici, nous voulons créer notre comptoir. Nommons ça compte, et par défaut, il sera 0. Nous devons maintenant renvoyer notre API publique, ces deux méthodes s'incrémentent et obtiennent des fonctionnalités équitables. C'est pourquoi nous faisons revenir ici et à l'intérieur, nous voulons retourner deux choses. Tout d'abord, il s'agit d'une fonction d' incrément. C'est juste une propriété où nous passons à l'intérieur de notre valeur. Et ce que nous voulons faire, nous voulons changer ce décompte que nous avons en tête ici. Nous sommes ici, comptez plus égaux, et voici notre valeur que nous voulons augmenter. Et en fait, il se peut que nous voulions augmenter par défaut, juste d'un seul. C'est pourquoi il est logique de passer ici un, dans ce cas, nous pouvons simplement appeler incrément et cela fonctionnera dès la sortie de la boîte. Et la méthode suivante sera ici, GetValue parce que nous voulons récupérer notre compte. Et en fait, ici, c'est juste une fonction qui va rendre notre compte. Et l'idée principale est qu'il s'agit de notre API publique. C'est ce qui est disponible dans cette fonction après que nous l'avons appelée, jetons un coup d'œil. Créons ici notre compteur et nous sommes deux points ici, notre fonction de compteur privé. Et en fait, ce que je veux faire ici, je veux d'abord consoler le journal, notre point de compteur GetValue. C'est une méthode pour obtenir notre comptoir. Deuxièmement, nous voulons appeler le point de compteur, et voici un incrément pour incrémenter la valeur R, puis compteur une fois de plus pour vérifier la valeur. Encore une fois, vérifions si cela fonctionne. Je suis en train de recharger la page, on en reçoit 01. Mais le plus intéressé par l'idée de ce que nous avons à l'intérieur de ce comptoir privé, si nous sommes ici, comptoir privé, vous pouvez voir que c'est une fonction et en fait, nous n'en avons pas si nous sommes ici, comptoir privé, vous pouvez voir que c'est une fonction et en fait, nous n'en avons pas accès à ce nombre de propriétés. Dans ce cas, ce nombre de propriétés est privé. Et étant donné que si je suis ici , vous pouvez voir que nous obtenons un objet avec deux valeurs, obtenons de la valeur et de l'incrément, et que nous n'avons aucun accès à notre propriété de compteur à l'intérieur. Ce code fonctionne, mais il est vraiment délicat et complexe car il s'agit d'une fermeture. Que signifie jamais la fermeture ? fermeture signifie que nous avons accédé à l'intérieur d' une fonction à la portée extérieure, ce qui signifie ici, par exemple, à l'intérieur de l'incrément que nous utilisons count et que nous n'avons pas de réduction à l'intérieur de cette fonction. fonction. Nous l'avons dehors ici en haut et exactement la même chose en ce qui concerne la valeur. Nous avons ce compteur ici en haut, pas à l'intérieur de cette fonction, pas à l'intérieur de cette fonction, qui signifie en fait que le collage ou fonction a accès à toutes les propriétés à l'intérieur d'elle-même et à toutes les propriétés qui l'ont été. avant. Pourquoi c'est important parce qu'ils en fait avec cette doublure unique, compteur contre est égal à un compteur privé, nous créons une fermeture parce que nous sommes maintenant compteurs existants. Nous avons une fermeture et nous avons cette référence à ce compteur. C'est pourquoi chaque fois que nous appelons GetValue et que nous incrémentons, cela fonctionne et il fait référence à ce compte en haut. Et vous pourriez dire, d'accord, mais ça ressemble à de la magie. Je ne comprends pas à quoi cela ressemble en JavaScript. Et c'est là que Console Directory peut nous aider si nous écrivons dans la console, pas dans le journal de la console, mais dans le répertoire de la console. Et à l'intérieur, je veux passer une fonction. Dans notre cas, il est contré GetValue puis caché ici, entrez. Ici, nous ne voyons pas de corps, mais notre fonction est un objet. Et nous sommes intéressés ici en partie ce que l'on appelle les scopes. Et c'est exactement ce qui nous intéresse par la suite ouvert ici des portées, nous avons ici une fermeture de propriété, et c'est exactement notre fermeture, comme vous pouvez le voir ici, nous avons un comptoir privé de fermeture. Ici, le compte est égal à un, ce qui signifie que nous avons exactement ce nombre de pistes est égal à 0, et maintenant il est à l'intérieur de la fermeture. C'est pourquoi il est disponible pour nous en JavaScript. Et les questions les plus anciennes concernant les clauses sont exactement les mêmes. Par exemple, on peut vous poser la question, vous devez créer une fonction qui sera stockée dans une chaîne secrète, et nous la retournerons simplement lorsque nous appellerons à nouveau cette fonction vous devez créer une fonction qui sera stockée dans une chaîne secrète, et nous la retournerons simplement lorsque nous appellerons à nouveau cette fonction. On dirait quelque chose comme ça. Par exemple, créons un secret privé de fonction. Ici, nous ne passons rien à l'intérieur, mais nous voulons faire à l'intérieur c'est créer notre chaîne secrète. Créons donc simplement un secret et il est égal à quatre. Ce secret est donc exactement notre fermeture. Pour qu'il soit disponible à l'extérieur, nous devons revenir ici une fonction. Nous retournons simplement ici une fonction, et cette fonction renverra un secret. Cela signifie que lorsque nous créons en dehors d'une fonction que nous pouvons nommer, par exemple, devenir secrète, elle doit appeler ici notre fonction secrète privée. L'idée principale est que fonction secrète privée redonne une fonction. Dans ce cas, r gets Secret est une fonction. Et maintenant, nous pouvons consoler l'heure du journal devient secrète et nous l'appelons simplement. Et en fait, comme vous pouvez le voir console, nous récupérons ce plein écran. C'est pourquoi notre chaîne secrète est en fait une fermeture et elle est disponible l'extérieur après avoir restauré ce secret privé à l'intérieur de la propriété supplémentaire. Dans ce cas, nous commençons divulgation après l'exécution de notre fonction. Et la fermeture est un motif très populaire à l'intérieur de JavaScript. C'est pourquoi vous devez savoir comment utiliser les fermetures. 8. C'est le cas: Vous pourriez avoir une question comme celle-ci. Écrivez une fonction qui aide à multiplier a et b et retourne le produit de a et B. Et comme vous pouvez le voir ici, nous avons cette notation étrange. Multipliez-les a et B, pas comme deux arguments, mais c'est le premier appel de la fonction, et il s'agit d'une deuxième couleur de la fonction. Et en fait, si vous avez une telle question, cela signifie que vous allez dans la direction du courant. Et le courant est une possibilité spéciale en JavaScript de porter une fonction. Et ensuite, on peut appeler ça comme ça. Et en fait, ici, nous pouvons implémenter ce truc avec un courant super basique. Essayons ça maintenant. Ce que je veux faire, je veux créer une fonction de multiplication. Et ici, nous obtenons notre A, donc ce sera le numéro un, par exemple. Ici, nous voulons renvoyer une fonction car comme vous pouvez le voir ici en haut, nous faisons appel au résultat de la multiplication de a, b, ce qui signifie que nous multiplions le retour d'une fonction maître. Nous pouvons donc écrire ici que nous obtenons une fonction qui obtiendra B. C'est le numéro deux, par exemple. Et ici, à l'intérieur, nous voulons multiplier nos num1 et num2. Dans ce cas, notre deuxième fonction nous permettra de multiplier le numéro un et le numéro deux. Et c'est ainsi que nous pouvons l'utiliser. Nous pouvons écrire ici le journal de la console. Nous voulons appeler ici, je vais multiplier la fonction et nous passons un exemple deux. Et après cela, nous appelons b. C'est notre deuxième fonction et nous passons en S3. Regardons dans le navigateur. Je suis en train de recharger la page et nous en avons six, qui signifie que ce code fonctionne. Et en fait, vous pouvez mieux écrire cette fonction de multiplication. Vous pouvez simplement omettre ici les retours et il s'agira alors d'une simple doublure unique. Nous avons ici la fonction multiplier et nous sommes engourdis ici. Ensuite, nous voulons revenir ici une fonction, et nous arrivons ici num2. Et nous voulons multiplier notre numéro un en multipliant num2. C'est exactement la même logique, mais elle raisonne la seule ligne. Je vais maintenant venir dire le code précédent. Et vérifions, comme vous pouvez le constater, nous obtenons exactement le même résultat, mais ce n'est pas vraiment actuel. Si vous résolvez une telle tâche, vous demandera généralement , d' accord, mais qu' avez-vous écrit ici ? Qu'est-ce que cela signifie ? Pourquoi avons-nous besoin d'une notation aussi étrange ? Et en fait, vous devez dire que nous parlons ici du courant, il y a une question suivante que vous pourriez avoir est de créer une sorte de fonction. Et c'est en fait une question difficile. Et si vous n' aviez aucune expérience des fonctions actuelles, vous ne serez probablement pas dangereux. C'est pourquoi nous allons voir ici comment créer une sorte de fonction et pourquoi avons-nous besoin d'elles et que les fonctions fonctionnent exactement comme je le multiplie ici. Nous pouvons donc écrire dans le navigateur, par exemple, Kyrie, et c'est notre fonction. Nous devons toujours passer à l'intérieur de la fonction que nous voulons couvrir. Dans ce cas, nous avons, par exemple, une fonction avec a, B et C. Nous avons donc trois arguments et nous voulons simplement additionner un plus B plus C. Le point principal est que le résultat de cardi est un et nommons qu'il en a porté. C'est ainsi que nous utilisons le courant, ce que nous pouvons faire avec la voiture plus tard, nous pouvons écrire ici nos arguments. Nous avons trois arguments, comment nous voulons, par exemple, écrire ici 123, tout comme trois arguments normaux. Nous pouvons également l'appeler avec 123, ce qui signifie que nous n'obtenons pas de résultat avant d'avoir trois arguments. Par exemple, nous n'avons qu' un seul argument ici, un, puis il retournera la fonction partiellement appliquée, ce qui signifie que nous récupérons une fonction. Et si nous appelons cette fonction et que nous passons deux arguments, nous obtenons suffisamment d'arguments et nous retournerons un résultat. Et bien sûr, il devrait également être possible d'appeler la fonction comme celle-ci. Tout d'abord, nous l' appelons avec un, puis nous l' appelons avec 23. C'est ainsi que fonctionne la fonction normalement portée et nous allons la créer tout de suite. Ce que nous voulons faire ici, nous voulons créer une fonction curry. Et comme je l'ai dit, c'est plus avancé et en fait c'est une bonne idée d' écrire cette fonction était un fichier de script ECMO. Donc cette fonction mots-clés, juste parce que nous écrivons quelque chose qui sera utilisé comme bibliothèque. C'est ici que je veux écrire une fonction, et ici nous obtenons une fonction. Et en fait, en haut, essayons-le, notre utilisation, pour que nous comprenions de quoi nous parlons. Nous avons dit ici que nous voulions être transportés. Nous appelons ici notre fonction actuelle. Et à l'intérieur, nous passons une fonction avec A, B et C. Et ici, nous voulons additionner A, B et C. Et en fait, je ne peux même pas l'écrire ici en bas après notre requête. Nous pouvons donc tester si cela fonctionne, en fait, comme vous pouvez le voir ici, comme notre fonction actuelle. Et nous entrons dans la fonction. C'est notre Fn, cet abc et a plus b plus c est notre fonction ici. Mais nous voulons maintenant savoir combien d' arguments nous avons ici. C'est ici que je veux créer une propriété appelée arité. Ici, nous pouvons simplement écrire la longueur de la fonction et nous obtiendrons la quantité d'arguments ici. Jetons un coup d'œil à ça. Parité du journal de la console. Et voici notre arité. Je cherche dans le navigateur et nous en avons trois, car ici nous avons trois arguments, A, B et C. Maintenant, nous voulons renvoyer ici une fonction parce que nous savons que la fonction actuelle est toujours une fonction. C'est y ici la fonction Let's write, nommons ça par exemple, f1. Et ici, je veux répandre nos arguments et vérifions ce que nous avons ici, consoles log F1 ici nos arguments. Et en fait, quand je recharge la page, comme vous pouvez le voir, nous n'avons rien trouvé parce que nous n'avons pas appelé cette voiture. Ce que nous devons faire par la suite, nous devons appeler la somme découragée comme une fonction et nous pouvons passer à l'intérieur de quelque chose. Dans notre cas, nous pouvons passer 123. Ce sont nos trois paramètres. Je suis en train de recharger la page et nous arrivons ici f1, 123. Nous avons donc tous les arguments sous forme de tableau. C'est notre idée. Et de toute évidence, nous pouvons aussi appeler cette fonction uniquement avec une seule. Ensuite, nous obtiendrons un tableau avec un seul argument. Ce que je veux faire à l'intérieur, je veux vérifier combien d'arguments nous avons obtenu ou si nous avons eu suffisamment d' arguments ou non. C'est ici qu' à l'intérieur du retour, nous pouvons comparer la longueur des arguments, c'est la longueur de notre tableau est plus grande ou égale arité. Cela signifie que nous obtenons suffisamment d'arguments pour sortir de la fonction. Donc, ici, je veux consoler suffisamment d'arguments. Dans ce cas, je veux simplement revenir ici notre fonction et l'appeler avec nos arguments. Je suis à nouveau répandu dans nos arguments, et cela mettra ici tous les arguments comme ils l'étaient auparavant. Jetons un coup d'œil à ça. Je suis en train de recharger la page et nous avons un message assez d'arguments. Et en fait, ici, nous pouvons consoler consigner ce que nous récupérons. Dans ce cas, nous devons obtenir notre résultat. Je suis en train de recharger la page, on en a six. Cela fonctionne correctement, ce qui signifie que notre code fonctionne déjà lorsque nous transmettons trois arguments à la fois. Mais ça ne marchera pas quand on passe moins que ça. C'est là que nous devons écrire ici L Condition et à l'intérieur, nous pouvons écrire, par exemple, la connexion de console nécessite plus d'arguments. Et maintenant, après ce livre, je voulais retourner une fonction, comme je l'ai déjà dit, si nous sommes passés, par exemple, encouragez un seul argument. Il doit renvoyer une fonction dans laquelle nous pouvons passer des arguments supplémentaires. C'est pourquoi nous devons ici renvoyer une fonction et nous pouvons la nommer, par exemple F2. Et à l'intérieur, nous allons passer d'autres arguments, ce qui signifie que c'est notre premier charbon, c'est notre deuxième coopérative. Par exemple, lorsque nous transmettons la somme actuelle, il s'agit également d'une fonction actuelle. Nommons qu'il en a partiellement porté. Ici, nous appelons « portés ». Maintenant, je veux construire une somme partiellement correcte pour que nous puissions vérifier ce qu'elle fait. Comme vous pouvez le voir ici, nous sommes à l'intérieur n'ont pas besoin d'arguments, et voici notre fonction était plus d'arguments. Et en fait, ici, nous voulons passer quelques arguments. Par exemple, nous pouvons passer ici 23, et ce seront exactement ces autres arguments que nous avons écrits ici. Ce que nous voulons faire maintenant, nous voulons concaténer nos arguments avec d'autres arguments pour placer tous nos arguments dans l'appel de la fonction. C'est pourquoi nous pouvons créer ici une variable, nouveaux arguments, et nous voulons concaténer ici nos arguments. Et j'appelle ici Concat et je transmets plus d'arguments. Maintenant, ici, nous n'avons pas besoin d'appeler notre fonction fn comme nous l'avons fait ici, mais nous devons appeler notre fonction F1 parce que nous voulons vérifier suffisamment d'arguments encore et encore, ce suffisamment d'arguments encore et encore, qui signifie que nous l' appellent récursivement. C'est pourquoi je veux retourner la fonction F1 et ils veulent répandre tous nos nouveaux arguments. C'est ici que trois points et de nouveaux arguments. Jetons un coup d'œil à ça. Je suis en train de recharger la page ici. Nous sommes en mesure de répondre à mes arguments et à suffisamment d'arguments. Qu'est-ce qu'il a un moyen ? Ici, c'est notre somme actuelle. Nous avons passé ici un argument, nous entrons dans les cellules. C'est notre journal de console qui a besoin plus d'arguments et voici notre fonction supplémentaire. C'est ici que nous appelons cette fonction et nous passons ici d'autres arguments. Il s'agit de cette variable. Maintenant, nous le concaténons, le nôtre. C'est ce que nous avons passé ici et 23, et nous avons appelé notre F1. Nous arrivons ici encore, nous avons assez d'arguments, et ici nous appelons notre fonction et nous en avons six. Supprimons maintenant tous nos journaux de console et vérifions comment cela fonctionne. Ce que je veux essayer ici, c'est notre bonne façon de l'appeler, nous pouvons l'appeler avec 123 et nous en avons six. Il fonctionne. Maintenant, nous pouvons l'appeler avec un. Comme vous pouvez le constater, nous reprenons une fonction et nous pouvons maintenant l' appeler avec 23 si vous pouvez voir que nous en avons également six, ce qui signifie que cela fonctionne. Et maintenant, nous pouvons l'appeler ici avec un tabouret et après cela avec trois et nous en avons six, ce qui signifie qu'il fonctionne correctement avec n'importe quelle quantité d'arguments. Et ici, nous avons eu une fonction où nous avons dix arguments. Ensuite, nous faisons une opération avec les arguments de Stan. Ensuite, nous appellerons cette fonction manière récursive jusqu'à ce que nous obtenions tous les arguments nécessaires. Comme vous pouvez le constater, la fonction d'écriture professionnelle n'est pas la TGA. Et si vous ne l'avez jamais fait auparavant, il est difficile de l'écrire directement dans l'interview, surtout sur le papier. La dernière question que vous pourriez avoir ici, accord, mais pourquoi avons-nous besoin de la fonction curry ? Et que peut faire votre fonction actuelle ? C'est pourquoi nous voulons maintenant utiliser notre fonction carrière dans notre véritable projet. Et ce que nous pouvons faire ici, on peut appeler ça deux fonctions, obtenir et cartographier. Essayons ça. Je veux créer une fonction get et ils veulent les porter. C'est pourquoi j'appelle ce genre de fonction. Et à l'intérieur, je passe une fonction avec deux propriétés. Tout d'abord, ce sera une propriété, et deuxièmement, ce sera un objet. Et ce que nous voulons revenir ici, nous voulons simplement prendre un objet par clé et ce sera une propriété. Voyons comment ça fonctionne. Comme vous pouvez le voir ici, nous avons notre but et nous passons ici deux arguments. Tout d'abord, propriété par exemple AD, et deuxièmement notre objet, par exemple un D1. Dans ce cas, nous en récupérons un. Ce que nous pouvons faire ici, nous le pouvons maintenant parce qu'il est porté, il suffit de l'appeler avec un seul argument, juste avec AD. Cela, vous pouvez voir que nous récupérons une fonction actuelle maintenant nous pouvons stocker quelque part et la réutiliser. Par exemple, nous pouvons créer ici une fonction supplémentaire, obtenir un ID, et nous appelons ici get avec juste Property ID. Maintenant, comme vous pouvez le voir dans le navigateur, nous pouvons utiliser la fonction GetID partout dans son application sur n'importe quel objet pour en obtenir un identifiant approprié. Nous pouvons maintenant faire exactement la même chose avec la carte. Par exemple, ici, je veux créer carte et ils veulent porter une fonction cartographique. Nous obtenons ici une fonction qui est un argument de la carte et des valeurs qui est un tableau. Ici, je veux juste appeler valeurs JavaScript simples qui mappent , puis transmettent notre fonction à l'intérieur. Mais maintenant, notre carte est transportée, ce qui signifie que nous pouvons l'utiliser partout comme une carte de carotte. Par exemple, nous pouvons passer à l'intérieur d'une carte, obtenir une carte d'identité. Et maintenant ici comme deuxième argument, nous pouvons passer un tableau et juste avoir ici id est égal à un. Comme vous pouvez le voir ici, nous avons directement un tableau d'identifiants à l'aide de la carte. Et en fait, boop passe deux arguments, mais on peut aussi le couvrir. Par exemple, nous pouvons nommer une fonction ici, const, get ID, et ici nous sommes nés pour appeler notre carte sur GetID. Dans ce cas, nous avons une fonction partiellement appliquée, obtenons un D, et nous pouvons l'utiliser pour obtenir des idées de nombreux tableaux. Par exemple, nous avons raison et nous avons des idées. Et nous appelons cette fonction sur le tableau avec des objets à l'intérieur. Et nous avons ici un D1. Et comme vous pouvez le constater, cela fonctionne. C'est exactement le besoin du courant d'écrire JavaScript et de manière fonctionnelle. Et voici, c'est un sujet assez avancé. C'est pourquoi il est tout à fait bon si vous ne connaissez pas ce sujet en tant que débutant, mais au moins vous devez avoir une compréhension de base ce qui est actuel et pourquoi en avez-vous besoin ? 9. Ajouter des éléments à la grille: Vous pouvez obtenir une question comme celle-ci et présenter concernant l'ajout d' éléments au tableau. Comme vous pouvez le voir ici, nous devons essayer de fonctionner qui obtient un tableau et un élément et renvoie un tableau avec le règlement. En fait, cela semble vraiment facile, mais vous pouvez le résoudre de différentes manières. C'est pourquoi vous devez le résoudre correctement et au moins dire à l' intervieweur la bonne façon. Donc généralement, les débutants utiliseront ici array push, puis nous construisons quelque chose comme ça. Nous avons donc une fonction, par exemple, ajouter, et nous entrons dans les arguments, tableau et notre nouvel élément. Et ce que nous faisons ici, nous utilisons le array push et nous passons à l'intérieur de R, L. Et après cela, nous retournons ce nouveau tableau. Ensuite, nous écrivons ici le journal de la console ajouter, et ici nous vérifions, OK , Par exemple, nous avons notre tableau 12, et voici notre troisième élément trois. Maintenant, vérifions si cela fonctionne où rechargement de la page et que nous avons 123, et vous pensez que vous construisez cette fonction correctement. Mais voici le problème. En fait, je veux écrire ici notre tableau. Par exemple, nommons les chiffres, et nous n'avons pas enregistré 12. Maintenant, ici à l'intérieur dépend, je veux juste passer nos chiffres. Mais après cela, je veux consoler les numéros de journal, nous rechargeons la page et nous obtenons 123123. Qu'est-ce que cela signifie ? Nous avons cette fonction d'ajout et nous retournons ici le tableau. Et la plupart des gens pensent que lorsque nous utilisons cette fonction, nous créons un nouveau tableau. C'est là qu'ils peuvent normalement écrire de nouveaux chiffres. Ici, nous appelons notre fonction d'ajout et nous pensons, d'accord, nous n'avons pas modifié notre rayon plus ancien, mais nous obtenons simplement de nouveaux nombres parce que la fonction d'ajout renvoie un tableau pour nous. Mais comme vous pouvez le constater, ces deux tableaux sont complètement égaux car poussée réelle du tableau modifie l'ancien rayon et ne crée pas de nouveau tableau. Et c'est généralement un bon exemple de mauvais code dans l'application. Pourquoi est-ce que c'est ? Imaginez simplement que vous ayez une partie de votre application et que vous avez le tableau de ce numéro, puis à un moment donné votre fonction disciplinée pour obtenir de nouveaux nombres. Mais hors du bleu, modifié votre ancien tableau de nombres, ce que vous n'aviez pas l'intention de faire. C'est pourquoi vous pensez que dans votre application, une certaine magie peut se produire simplement parce que le deux-points de cette fonction modifie certaines données en dehors de cette fonction, c'est une mauvaise approche. Comment pouvons-nous le réparer et l'améliorer. Nous ne devrions pas utiliser ici array push. Il n'est pas sûr. Ce que nous voulons utiliser ici à la place, par exemple, opérateur de propagation, nous pouvons écrire ici que nous voulons renvoyer un nouveau tableau et nous voulons répartir tous les éléments de notre tableau que nous obtenons en guise d'argument. Et si vous ne savez pas quelle est la propagation, agit d'un opérateur ECMO Script six, il s'agit de trois points. Et ce que nous faisons ici, nous sommes répartis dans tous les éléments de ce tableau à l'intérieur de notre nouveau tableau, ce qui signifie essentiellement que nous créons une copie de ce tableau. Déplacez maintenant un élément pour ajouter cet élément au QRA suivant. C'est pourquoi nous venons d' essayer l'élément coma. Jetons un coup d'œil à ça maintenant. Je suis en train de recharger la page et nous obtenons une autre réponse. Nous arrivons ici 123 et ici 12, qui signifie en fait que cette ligne unique qui nous renverra nouvelle fonction de tableau est complètement sûre car nous ne modifions aucune donnée en dehors de cette fonction. C'est pourquoi cette implémentation est bien meilleure si on vous demande même quelque chose d'aussi banal, comme pousser des éléments vers le tableau a également le même comportement exécutif avec les objets. Si nous passons à l'intérieur d'une fonction, d'un objet, et lorsque nous y mutons, nous mutons des objets en dehors de notre fonction, et c'est mauvais. Vous pouvez également utiliser Spread avec un objet pour créer un nouvel objet. Dans ce cas, nous sommes du bon côté. Si vous ne saviez pas que cette fonction comme ici est appelée pure car d'abord, cette fonction retournera le même résultat chaque fois que nous l' appelons avec les mêmes arguments. Deuxièmement, il ne modifie aucune variable en dehors de la fonction. C'est y, c'est une fonction pure sûre. 10. Concaténation des tableaux: Nous avons déjà parlé d'éléments cachés du tableau et pourquoi Bush n'est pas toujours la meilleure approche. Mais vous avez peut-être aussi une question similaire. Par exemple, nous avons ici une tâche, écrire une fonction qui concaténera deux tableaux. Et en fait, vous pouvez utiliser ici push et ce sera une mauvaise réponse. C'est pourquoi vous pouvez écrire ici les tableaux de fusion de fonctions. Ici, nous obtenons deux tableaux, par exemple tableau 1 et tableau à. Et ici, vous pouvez écrire le tableau un, Bush, et ici vous répandre le tableau deux. Et après cela, vous pouvez simplement renvoyer le tableau 1. Et en fait, pas beaucoup de gens écriront du code comme celui-ci car ici vous utilisez push et ensuite vous êtes réparti dans le tableau, mais vous pourriez penser à une telle approche. Maintenant, pour voir le problème, nous devons tout d' abord créer notre résultat. Ici, à l'intérieur du résultat, nous devons utiliser deux tableaux. tableau un, par exemple, il ne sera qu' un et notre tableau deux sera, par exemple, 23. Maintenant, nous voulons appeler notre course à la fusion et passer et dit tout d'abord le tableau un et deuxièmement le tableau deux. Et vérifions et verrouillons la console ce que nous obtenons. Donc, tout d'abord, résultat, puis tableau 1 et tableau deux. Je suis en train de recharger la page et nous recevons 12312323. C'est exactement le problème, comme si ce n'était pas une vidéo précédente. Tableau de mutation Bush. C'est ainsi que nous changeons le tableau 1 même si nous ne voulons pas le modifier. C'est pourquoi pousser dans ce cas n' est pas la meilleure approche. Ce que nous pouvons utiliser ici, c'est moi, le tableau concat, qui a toute l'approche de JavaScript ou simplement un opérateur de propagation, comme nous l'avons fait auparavant. Donc, au lieu de ce retour et de la vraie poussée, nous pouvons tout d'abord écrire ici, tableau un point concat, et nous avons une fonction de concaténation sur le tableau. Et ici, nous sommes répartis dans notre tableau deux, vérifions le Sud où recharger la page ici est notre résultat 123 et ici tableau un et tableau deux à trois. C'est exactement la bonne approche car concaténation ne mute pas un tableau. Dans ce cas, il reviendra pour nous dans un nouveau tableau. C'est pourquoi tout va bien. Si vous ne souhaitez pas utiliser re concat, vous pouvez toujours utiliser un opérateur de propagation. Ici, nous utiliserons le tableau un comme spread. Ici, nous répandons notre tube à rayons. Et en fait, le résultat sera exactement le même pour obtenir 123. Et en fait, j'aime beaucoup cette approche car elle est plus flexible et on peut fusionner non seulement la race, mais aussi les objets. Vous pouvez ajouter de nouveaux éléments ici, et c'est plus moderne. Si, par exemple, vous avez une question pour concaténer trois baies ou plus, c'est également possible, même array concat peut fonctionner avec plusieurs baies, comme vous pouvez le voir ici dans la documentation ici, nous avons trois tableaux différents. Vous pouvez écrire le premier point concat de tableau, puis vous avez un tableau secondaire et un troisième tableau. Et en fait, cela fonctionnera correctement, mais en fait, vous pouvez faire exactement la même chose avec spread ici, vous êtes réparti dans le tableau un, tableau deux, le tableau trois. Si vous en avez besoin. Les deux variantes sont possibles. 11. Vérifiez si l'utilisateur avec un tel nom existe.: Vous pourriez avoir une question. Vérifiez que l'utilisateur portant ce nom existe dans un tableau d'objets. Évidemment, il ne peut pas s'agir de nom ou d'utilisateur. Mais l'idée est que vous devez vérifier une propriété de l' objet à l'intérieur d'un tableau. En fait, il existe différentes façons de le mettre en œuvre. Et le pire moyen possible est d'utiliser for-loop. Parce que comme je l'ai dit précédemment, for-loop est de niveau très bas et ce n'est pas un outil approprié pour cette tâche spécifique. Regardons à quoi ça ressemble avec for loop. Nous voulons donc créer une fonction, par exemple, son nom existe. Et ici, nous devons passer deux arguments. Tout d'abord, c'est un nom, et deuxièmement, il s'agit d'un ensemble de nos utilisateurs. Maintenant, dans la propriété créative masque, qui sera booléenne, et cela nous montrera que nous avons cet utilisateur dans un tableau. Ici, nous pouvons faire en sorte qu'une piste existe et, par défaut, elle sera fausse. Nous devons maintenant écrire une boucle for. Donc ici, nous avons notre lead I à partir de 0, je suis moins que la longueur des utilisateurs. Et voilà que nous allons faire « I plus ». Maintenant, ce que nous voulons faire à l'intérieur de chaque élément, nous devons vérifier son nom. C'est ici que nous vérifions les utilisateurs. Le nom du point est égal à notre nom. Et s'il est égal, alors nous voulons attribuer à l'intérieur existe. Après notre boucle for, nous voulons restituer notre propriété existante. Oui, ce code va fonctionner. Jetons un coup d'œil, mais c'est très bas niveau, comme vous pouvez le constater, nous avons, par exemple, nommé John. Essayons ici, Jon et entendons le coma nos utilisateurs. Comme vous pouvez le voir, nous en sommes arrivés à travers car nous entendons tel utilisateur avec un tel nom à l'intérieur du tableau. Si j'écris ici juste en entier, on devient faux. Mais le problème avec ce code ne montrera pas que vous êtes un développeur avancé. C'est pourquoi je voulais vous montrer trois autres possibilités d' écrire ce code. Et en fait, ces trois possibilités sont des occasions. Mon préféré sera une seule ligne ici, donc nous pouvons créer une fonction dont le nom existe, et ici nous obtenons le nom et le tableau. Et comme vous pouvez le voir ici, je n'ai pas essayé les utilisateurs de beurre ray, car maintenant nous pouvons utiliser cette fonction sur n'importe quelle donnée. Maintenant, ce que je veux appeler ici, c'est la somme des points de tableau. Et si vous ne savez pas ce que fait Sam, vous pouvez en appeler sur le rayon donné quelques prédicats. Donc, vous voulez vérifier quelque chose à l'intérieur. Dans notre cas, certains retourneront une paille si nous avons au moins un seul élément qui remplit notre condition. À l'intérieur de certains, nous pouvons conduire l'élément. Et nous voulons vérifier ici nom de l'élément est égal à nos noms qui ont été transmis à l'intérieur. Et c'est littéralement le même code que celui que nous avons écrit ici, mais beaucoup plus petit. Nous allons vérifier le son. Je recharge la page et je tape juste son nom existe car vous pouvez voir où devenir vrai. En fait, certaines sont la meilleure solution à cette question, mais il est également possible d' utiliser d'autres solutions. Nous allons donc commenter cela et réessayer. Nous avons ici encore deux arguments : nom, tableau. Maintenant, à l'intérieur, nous pouvons essayer trouver l'élément avec un tel nom. C'est ici que nous allons créer un élément et nous utilisons ici tableau point trouver où obtenir notre élément. Et ici, nous voulons vérifier que nom du point d' élément est égal à notre nom depuis le haut. Mais dans ce cas, notre élément est en fait un objet. Ce n'est pas booléen. C'est ici qu'il va brasser l'élément wrapper dans Boolean pour renvoyer Boolean et non un objet. Dans ce cas, il fonctionnera correctement. Je suis en train de recharger la page comme vous pouvez la voir comme ça. Donc, les principales différences qui ont été maîtrisées un peu plus de code car nous devons le convertir en booléen. Et la dernière chose que nous pouvons utiliser ici n'est pas très bien, mais trouver un index. Et si vous ne savez pas ce que fait l'index , c'est exactement la même logique, mais nous trouvons l' index de cet élément. Si nous pouvons trouver l'objet portant ce nom dans notre tableau. Ici, nous n'obtenons pas notre index de boutons Element. Et après cela, nous saurons que si cet indice est inférieur à 0, cet élément n'a pas été trouvé. Ici. Nous pouvons essayer de renvoyer un indice supérieur à 0. Dans ce cas, nous savons ou K C'est plus grand que 0. Nous avons cet élément à l'intérieur du tableau. Et comme vous pouvez le constater, ce code fonctionne exactement de la même manière. Mon approche serait la somme, la prochaine approche nous ira bien. La recherche de l'index est également correcte, mais vous ne devez pas utiliser for-loop car elle est très inefficace pour une telle tâche. 12. Supprimer tous les doublons dans la grille: Vous pourriez également obtenir une tâche comme celle-ci. Supprimez tous les doublons de la baie. Ce qui signifie essentiellement que si vous avez un tableau de nombres et que vous avez, par exemple, 112, vous devez vivre sur le 12. Je vois ici trois façons différentes de résoudre notre problème. Essayons de trouver la meilleure solution. Par exemple, nous pouvons créer ici un tableau unique de fonction. Nous arrivons ici à notre baie pour supprimer les doublons. Voici ce que nous voulons faire pour renvoyer un tableau et nous voulons répandre dans un nouvel ensemble et où le bison à l'intérieur du tableau, si vous ne savez pas ce qu'est l' ensemble en JavaScript, c'est un objet qui vous permet de stocke des valeurs uniques de n'importe quel type. Cela signifie que si nous sommes ici et que vous avez dit que nous passons à l'intérieur du tableau, par exemple 112, où Entrée cachée, comme vous pouvez le voir, nous n'avons que 12 car à l'intérieur de notre ensemble, les éléments peuvent être dupliqué. C'est pourquoi, comme vous pouvez le constater, si nous allons nous répandre sur votre plateau et le mettre dans le nouveau tableau. Pour convertir le revers en tableau, nous obtiendrons nos éléments uniques. Et en fait, peu de gens connaissent cette solution, mais c'est la meilleure solution car il s'agit avant tout d'un seul revêtement. Deuxièmement, il s'agit rarement de performances si vous n'avez pas fini, cette solution, ce n'est pas mal. Vous pouvez toujours construire cette logique par vous-même. partie la plus importante que même FOR boucle ici, si vous utilisez FoReach incursion n'est pas si mauvaise. Jetons un coup d'œil à ça. Par exemple, nous avons ici la même fonction, tableau unique, et nous voulons écrire ici une boucle. Et bien sûr, nous devons stocker notre résultat dans une propriété supplémentaire. Faisons donc ici un résultat qui sera notre tableau unique. Maintenant, je veux parcourir chaque élément de notre tableau avec la fonction FoReach. Ici, nous obtenons notre article comme chaque élément de notre tableau. Maintenant, ce que nous voulons vérifier ici, si nous avons déjà cet article dans notre résultat, nous pouvons vérifier ici le point de résultat inclus. Et si vous ne savez pas, incluez, vérifiez si nous avons le règlement dans un tableau et que nous voulons passer à l'intérieur de notre article. Cela retournera donc vrai s'il inclut. Mais en fait, nous devons mettre ici la banque pour avoir une négation. S'il n'inclut pas cet élément dans le tableau , nous voulons le pousser à notre résultat. Donc, le résultat Bush et ici avec l'objet. Comme vous pouvez le constater, même pour chaque boucle ici n'est pas si mauvaise car elle est isolée à l'intérieur d'une fonction où il est plus simple de boucler chaque élément et nous poussons notre résultat. directement dans la nouvelle baie. Et bien sûr, à la fin, nous devons rendre nos résultats. Alors, retournons le résultat et vérifions s'il fonctionne. Voici notre fonction unique tableau 112. Et comme vous pouvez le constater, nous en récupérons 12. Mais évidemment, notre fonction ne fonctionnera pas avec des objets ou des tableaux à l'intérieur, et c'est tout à fait normal. Donc, si vous avez ici un objet avec un objet égal à un, et que vous avez ici un objet de plus avec un objet égal. Comme vous pouvez le constater, nous avons deux éléments et c'est tout à fait correct car il s'agit de deux objets différents et nous ne pouvons pas les comparer. Et en fait, nous pouvons obtenir cela pour les riches en utilisant Reduce. De cette façon, nous écrirons exactement le même bouton de code de la manière la plus fonctionnelle. Nous allons donc créer notre tableau unique de fonction. Nous arrivons ici à notre tableau et nous voulons directement retourner un re, réduire. Et ici, à l'intérieur, nous devons passer notre fonction avec accumulateur et chaque élément. Ici, nous avons une fonction et en tant qu'argument par défaut, nous avons ici un tableau vide, exactement comme nous avions ici où nous avons écrit le résultat est égal à tableau vide. Maintenant, ce que nous voulons faire à l'intérieur, nous voulons vérifier le contenu de notre accumulateur, donc nous vérifions nos résultats. Si nous avons dans ce tableau obtenu notre élément. Donc, si nous l'avons , nous retournons simplement accumulateur pour ne rien changer. Dans d'autres cas, nous voulons pousser cet élément vers l' accumulateur et nous n'utilisons pas la poussée de tableau, mais nous utilisons spread. Ici. Je suis répandu dans un accumulateur et ensuite j' ajoute notre élément. De cette façon, ce code est complètement fonctionnel. C'est facile à comprendre et n' aurait pas cette mauvaise poussée ici. Remplissons la page et vérifions si elle fonctionne. Comme vous pouvez le constater, cela ne fonctionne toujours pas avec les sujets, ce qui est tout à fait très bien. Et cela fonctionne avec les primitives car ici on a été retiré de notre tableau. Comme vous pouvez le constater, vous disposez de trois variantes différentes pour implémenter l'unicité dans le tableau. Et en fait, toutes ces réversions sont tout à fait bonnes à montrer lors de l'entretien. 13. Trier le tableau: Nous avons déjà fait un certain exercice lorsque nous avons cartographié nos utilisateurs dans l'une des vidéos précédentes. Mais ici, je veux parler de chirurgien, un peu différent. Comme vous pouvez le voir, vous pouvez obtenir la question, trier le tableau de nombres. Ce qui signifie en fait que nous avons un tableau, par exemple, 351, et que nous devons trier. Pour cela, nous utilisons certaines fonctions en JavaScript. Nous écrivons simplement un tri. Ici, nous devons passer une fonction et nous avons de telles conditions. Quand a est inférieur à b, nous revenons ici moins un s'il est supérieur à, supérieur à 10 s'ils sont égaux. Et auparavant, nous avons écrit ici a et B, et ici nous pouvons écrire un plus petit que b, puis nous revenons moins un. Dans d'autres cas, nous en retournons un. De plus, il est important de se rappeler que certains retours, le résultat de certains, ce qui signifie que nous pouvons le placer dans variable, par exemple, résultat, mais cela va également muter notre tableau que nous avons créé. Et en fait, cela n'a pas vraiment de sens ici car cela a généré un tableau à la volée. Mais si les gens le mettent dans la variable , c'est logique. Ici, nous avons notre tableau et nous y voilà certainement, regardons l'exemple. Je suis connecté à la console ici, tableau et résultat. Et comme vous pouvez le voir dans le navigateur ici, nous obtenons exactement le même tableau trié. Cela se produit parce que le tri mute existe dans un tableau et nous devons nous en souvenir. Il y a également un autre point important à retenir. Dans la fonction de comparaison, nous pouvons renvoyer un nombre qui est supérieur à 0 et inférieur à 0, et ce sera exactement le même. Ce sera avant a et trier a avant B, ce qui signifie en fait que nous pouvons écrire notre code un peu différemment et non pas avec moins 11, nous pouvons simplement retourner ici un moins b. Pourquoi est-ce ? Parce que nous avons ici deux chiffres, par exemple trois moins cinq. Dans ce cas, il sera inférieur à 0. Et puis nous aurons cette condition avant B. Examinons ça. Je suis en train de recharger la page. Nous obtenons un à cinq comme précédemment, si les gens ici, b moins a, alors ils seront triés dans une autre direction. Comme vous pouvez le voir, nous obtenons cinq par un, ce qui signifie que pour le tri, nous pouvons le trier en renvoyant moins 11 ou quelque chose de moins de 0 et supérieur à 0. De plus, il est important de se rappeler que nous pouvons utiliser le tri sur les primitives Louis. Si vous essayez de trier un objet ici, il ne fera rien car vous ne pouvez pas vraiment comparer les objets, mais vous pouvez trier les propriétés et les objets de site. Et nous avons pour tâche de trier un éventail de nos livres par nom de famille de l'auteur. Ici, nous pouvons utiliser exactement la même fonction de recherche ET. Nous écrivons ici, les livres sont triés, et voici un argument, un livre et un livre deux. Et maintenant, nous devons les comparer correctement. Donc, tout d'abord, il faut trouver le nom de famille du premier auteur et du deuxième auteur. Ici, écrivons un nom de famille génial. Et voici, nous avons pris notre livre one.org. Et ici, nous voulons diviser notre nom avec de l'espace et obtenir ici le premier argument. Dans ce cas, nous obtiendrons le nom de famille de notre génial. Maintenant, je vais copier cette ligne et ici nous avons aussi LastName, et voici le livre deux. Et maintenant, après ce week-end, comparez ces deux cordes. C'est pourquoi nous pouvons ici écrire ou LastName un plus petit que ASO, LastName outil, puis nous voulons renvoyer moins un. Dans l'autre cas, nous en retournerons un. Et en fait, comme vous pouvez le voir ici, nous devons utiliser moins 11 car ce n'est pas des nombres où le pays soustrait les chaînes. Et comme vous pouvez le voir ici dans le navigateur, nous n'avons rien consolé. Console consignons maintenant nos livres car en fait, lorsque nous avons muté notre tableau, rechargeons la page. Et comme vous pouvez le constater, ce sont nos livres. Mais maintenant, nous avons Susan Collins en premier lieu. Comme vous pouvez le voir, c'est trié parce que nous avions déjà roulé ici, puis Mary Lou puis John jawline, qui signifie en fait que ce code fonctionne. Et c'est ainsi que vous triez un tableau d'objets par propriété. 14. L'entrevue N'est Pas Ce Que Vous Pensez: Beaucoup de gens, surtout les débutants, ne comprennent pas correctement le but de l'entretien. Ils pensent qu'ils doivent venir à l'entrevue, répondre à un tas de questions et trouver un emploi. Et ce n'est pas comme ça un grand car l'entier est en fait une communication entre plusieurs personnes partout où côté voulait clarifier certaines questions concernant une autre personne. Par exemple, si nous parlons d'intervieweur, il s'intéresse à vos connaissances et évidemment à la façon dont vous allez vous intégrer dans son équipe. Il ne s'agit pas uniquement de répondre à des questions. C'est plutôt comme le ping-pong. Vous posez une question et l'intervieweur pose les questions. Cela ne devrait pas être comme un seul intervieweur qui pose les questions et utilise simplement une réponse car dans ce cas, vous pouvez d' abord obtenir des réponses à vos questions. Deuxièmement, vous ne démontrez pas que vous êtes intéressé par cette entreprise ou par ce poste spécifique. Lorsque vous parlez avec le technicien et le spécial avec chacun, vous devez montrer que vous êtes intéressé. Vous devez poser quelques questions sur l'entreprise, sur l'équipe. Combien de jours ouvrables avez-vous ? Il y a des heures supplémentaires ici, combien de fois les gens vivent dans l'entreprise, combien de temps les gens travaillent généralement dans l'entreprise, etc. Parce que tout d'abord, vous voulez savoir quelles sont les conditions de travail dans cette entreprise et pas seulement obtenir une entreprise avec de mauvaises conditions de travail. Et évidemment, je peux comprendre que si c' est votre premier magasin, vous voulez aller n'importe où, vous voulez simplement commencer à travailler et ils le comprennent totalement. Mais si vous ne voulez pas souffrir plus tard, il est très logique de poser ces questions. De plus, vous devez aimer le chef d'équipe ou l'intervieweur, et ce sera généralement votre futur patron parce que vous travaillerez beaucoup avec cette personne et cela va de même avec l'équipe. C'est vraiment une bonne idée de rencontrer toute l'équipe, au moins pour vérifier quelle est l'ambiance à l'intérieur de la vapeur ? Les gens sont-ils amicaux les uns envers les autres ? Sont-ils satisfaits des conditions de travail et ainsi de suite ? Et je peux dire la même chose au sujet de la vérification du bureau. C'est vraiment bizarre parfois quand on n'a pas le droit de voir tout le bureau car il s'agit d'un endroit où vous travaillerez et vous devez être satisfait des conditions de travail. Je vous recommande vivement de demander le court terme au bureau afin que vous puissiez au moins voir les conditions de travail. Avez-vous suffisamment de lumière là-bas, quels moniteurs vous disposez, etc. 15. Fonction de plage d'écriture: Vous pouvez effectuer un exercice de codage pour implémenter la plage. Qu'est-ce qu'il a un moyen ? C'est une fonction d'aide qui ressemble à ceci. Par exemple, si nous appelons une plage de 1 à 50, il générera pour nous un tableau 123456 et ainsi de suite jusqu'à ce qu'il soit décalé. Et il s'agit en fait d'une très bonne aide lorsque vous avez besoin de générer des données. Par exemple, vous souhaitez générer un cinquième utilisateur aléatoire. Dans ce cas, votre assembleur génère un tel tableau, puis pour chaque élément que vous effectuez un mappage et un nouvel utilisateur aléatoire. C'est pourquoi cet assistant existe dans presque toutes les bibliothèques d'assistance, comme par exemple, un tiret ou une Lambda. Et la diversité est une solution de réflexion sur les résultats, c' est en utilisant for-loop. C'est ici que vous pouvez écrire cette fonction comme ceci. Vous avez ici une plage de fonctions, et vous avez ici le début et la fin, par exemple, à partir de 150. Et puis, à l'intérieur, nous devons écrire une boucle for-loop du point de départ au point final. C'est ici, je suis égal à des étoiles. Donc nous ne partons pas de 0, mais à partir du style ici, nous sommes juste en moi moins ou égaux, et ici, nous faisons I plus plus. Maintenant, dans cette boucle for-loop, nous devons pousser chaque indice à notre résultat. C'est y. Créons ici notre résultat principal. C'est notre tableau. Maintenant, à l'intérieur, nous pouvons écrire la poussée des résultats et nous poussons ici notre I. Et maintenant nous retournons notre résultat. C'est ainsi que vous pouvez créer une fonction de plage en utilisant for-loop. Vérifions le navigateur, j'écris ici la fonction plage une virgule 15, et nous obtenons notre tableau de un à 50, ce qui signifie que notre code est complètement correct, mais il est super bas niveau et nous pouvons le faire mieux. Un niveau plus avancé consiste à tirer parti de notre baie de disques. Nous pouvons écrire dans le tableau de navigateurs puis notre fin, par exemple 15. Et comme vous pouvez le voir, cela renvoie premier tableau vide où nous avons réservé 50 éléments et ce que nous pouvons juste après ces touches de points. Et maintenant, nous appelons simplement ces clés et nous recevons un itérateur de tableau. Maintenant, si nous essayons de répartir cet itérateur de tableau dans un tableau, comme vous pouvez le constater, nous obtenons nos 50 clés en commençant de 0 à 49. Après cela, nous devons simplement cartographier chaque élément et y ajouter notre point de départ. Ici, nous pouvons écrire une carte de points, et ici nous avons chaque élément et nous écrivons élément plus stat dans notre cas, par exemple, plus un, et nous obtenons exactement le même résultat. Il s'agit d'un tableau compris entre un et 50. C'est pourquoi cette variante est un peu plus avancée. Ici, nous pouvons créer notre fonction de gamme et nous arrivons ici Stat. Et maintenant, à l'intérieur, nous voulons renvoyer cette logique. Et comme vous pouvez le constater, il s'agit d'un tableau dans lequel nous fournissons et nous fabriquons des clés et nous sommes répartis dans ce rater de tableau à l'intérieur de notre nouvelle baie. Et nous sommes en train de cartographier chaque élément. Et là où je n'ai pas entendu notre point de départ, rechargeons la page et vérifions si elle fonctionne. Je passe donc à l'intérieur de la fonction orange 150 et nous obtenons un beau tableau de 1 à 15. Et c'est ainsi que les gens écrivent généralement cette fonction dans les bibliothèques d' assistance. Par exemple, lambda, bien que tiret. 16. Écrire la fonction Shuffle: Vous pourriez avoir une question lors de l'entretien. Écrivez une fonction qui implémente la fonction Shuffle. Que signifie « shuffle » ? Il suffit de modifier la position des éléments à l'intérieur d'un tableau. Et en fait, il n'est pas si facile de l'implémenter en utilisant, par exemple, pour chacun d'eux. Mais ici, nous pouvons tirer parti de la méthode aléatoire afin de trier les éléments de manière aléatoire. C'est en fait ce que nous voulons entendre. Créons notre fonction aléatoire des éléments. L'idée principale est que nous obtenons ici notre gamme d'articles. Et ça peut être n'importe quoi. Il peut s'agir, juste d'un nombre, d'un objet ou peut-être même d'un tableau de tableaux. Cela doit fonctionner dans tous les cas, c'est pourquoi ce que nous voulons faire**** veut parcourir chaque élément en boucle et créer pour chaque élément et un objet avec clé et valeur. Et en fait, ils sont à l'intérieur. Nous aurons une clé aléatoire générée par aléatoire. Nous aurons également leur valeur. C'est exactement la valeur de notre élément. Dans ce cas, nous pouvons trier par champ, notre tableau, puis simplement supprimer cette clé aléatoire. Allons le faire maintenant. Je suis directement ici pour retourner nos articles. Et tout d'abord, j'appelle Map. Et ici, nous avons accès à tous les éléments. Appelons-le un objet haut. Et ce que nous voulons faire, nous voulons que chaque élément renvoie un objet avec deux propriétés. Donnons un nom à cette propriété car elle est en fait appropriée pour le tri. Ici. Nous venons d'essayer les mathématiques au hasard. Ici, nous aurons notre propriété aléatoire et la prochaine sera la valeur. À l'intérieur de la valeur, nous stockons notre article. En fait, lorsque nous vérifions notre code dans le navigateur maintenant, nous appelons simplement nos éléments aléatoires , par exemple, 12. Comme vous pouvez le constater, nous entrons dans le tri des objets et ici le nombre aléatoire et la valeur sont la valeur de notre article. Et c'est vraiment très bien car ici, à l'intérieur de la valeur, nous pouvons stocker des nombres, des objets ou des tableaux. Cela n'a pas vraiment d' importance pour nous. Après notre mappage, nous voulons trier nos éléments à l'intérieur de ce tableau en fonction de cette propriété. C'est pourquoi nous pouvons écrire ici le tri et nous obtenons ici l'article un et l'article deux. Ici. Ce que nous voulons faire, nous voulons écrire l'élément un tri à un point moins le tri à deux points et nous saurons en fait ce tri à l'aide d'une propriété numérique, ce qui signifie ici que nous pouvons simplement utiliser substract et non écriture moins 11. Il va le trier correctement. Mais pour nous, l'eau n'a pas d' importance car nous devons simplement la trier pour changer de position. Et après avoir changé de position, nous voulons obtenir nos spécifications de valeur. Pour cela, nous devons essayer une carte de plus. Et voici, nommons a parce que c'est notre objet et nous voulons lire ici une valeur de point. Et en fait, c'est notre article qui a été stocké ici à l'intérieur de chaque objet. Jetons un coup d'œil à ça. Je suis en train de recharger la page ici, les articles 12 mélangés. Nous en arrivons à un. Je l'appelle de nouveau ici à un nouveau ici 12, ce qui signifie qu'il fonctionne avec n'importe quel élément et qu'il le mélange simplement. Et en fait, c'est une façon incroyable de résoudre ce problème parce que nous exploitons ici les mathématiques aléatoires. Et pour chaque élément, nous créons ce tri en valeur n. Nous trions simplement ces nombres aléatoires et maintenant ils sont mélangés. Après cela, nous ne faisons que récupérer nos articles. C'est le moyen le plus simple et le plus correct de mélanger les éléments à l'intérieur du tableau. 17. Trouver le nombre d'événements de valeur minimale dans la liste: Vous pourriez avoir une tâche comme celle-ci. Recherchez le nombre de devises de valeur minimale dans la liste. Ce qui signifie en fait que nous avons un tableau de nombres et que nous devons d'abord trouver la valeur minimale à l'intérieur, puis calculer le nombre de fois que nous avons cette valeur. Et en fait, si vous essayez d'utiliser la boucle FOR ici, ce sera vraiment fastidieux car vous devez l'utiliser deux fois. Tout d'abord, pour trouver la valeur minimale à l'intérieur du tableau. Deuxièmement, calculer combien de fois nous avons cette valeur à l'intérieur. C'est là que nous devons trouver la bonne fonction dans JavaScript pour résoudre plus facilement. Et en fait, nous avons une telle fonction dans JavaScript et elle s' appelle Math minimum. Comme vous pouvez le voir ici, nous transmettons plusieurs arguments et cela reviendra pour nous le plus petit. C'est pourquoi nous pouvons utiliser cette fonction, mais elle ne fonctionne pas avec les tableaux. Ce que nous pouvons faire à la place, nous pouvons écrire un minimum de mathématiques et nous ne pouvons pas passer à l'intérieur du tableau, mais nous pouvons utiliser un opérateur de spread ici, et cela convertira notre tableau deux arguments. Ici, nous pouvons avoir un tableau 123 et nous en récupérons un. Et c'est exactement ce que nous voulions. C'est pourquoi, comme vous pouvez le constater sur une seule ligne, nous pouvons remplacer notre boucle for-loop, qui sera beaucoup plus difficile à écrire. Tout d'abord, nommons ici la valeur. Ici, nous voulons l' appeler sur notre tableau. Et créons ici notre tableau, qui sera 123. Et ici, nous voulons diffuser notre réseau. Nous avons trouvé notre valeur minimale dans le tableau. Maintenant, comment trouver combien de fois nous avons cette valeur dans le tableau. Et en fait, la variante la plus simple est d'utiliser le filtre. Si nous filtrons notre tableau en fonction de cet article minimum, nous obtiendrons un tableau de nos articles minimaux. Et ensuite, nous pouvons simplement obtenir une longueur de ce tableau. Cela ressemblera à ça. Nous pouvons obtenir ici notre tableau minimum. Et ce que nous voulons faire, c'est un filtre de tableau. Et ici, nous avons accès à chaque élément et nous comparons simplement si notre élément est égal à notre valeur minimale. Dans ce cas, en moi, un tableau, non, nous n'avons que nos valeurs minimales. Maintenant, nous pouvons écrire ici juste la longueur de point min du tableau de consoles , et il nous retournera exactement le nombre d'occurrences de cette valeur minimale que nous avons à l'intérieur du tableau. Examinons cette heure de rechargement de la page pour en obtenir une. Si nous ajoutons ici 11 deux fois , nous en avons trois. Et comme vous pouvez le voir, notre code fonctionne et nous n'avons pas résolu notre problème. C'est pourquoi je vous recommande vivement de toujours essayer de trouver le bon outil pour le bon saut. 18. C'est ça: Dans cette vidéo, nous examinerons toutes les questions liées à cela et au contexte dans JavaScript. Vous pourriez deviner une question comme celle-ci. Que va-t-il être verrouillé ici ? La première tâche que vous obtenez, vous avez une fonction avec un mot-clé de fonction. C'est important. Maintenant, à l'intérieur, nous écrivons simplement ce journal de console, et maintenant nous sommes un élément deux-points. La question est donc de savoir ce que nous verrons dans notre journal de console ? Et en fait, dans le navigateur, vous pouvez voir que nous voyons la fenêtre et vous pourriez penser, ok, à l'intérieur des fonctions, cela est toujours référencé dans la fenêtre, mais ce n'est pas correct. Au lieu de cela, il s'agit de référencer l'objet global. C'est peut-être une fenêtre, elle peut être non défendue, c'est peut-être autre chose. Tout dépend du contexte. Mais si vous définissez un mot-clé de fonction directement dans le code JavaScript sans imbrication, il s'agit d'une fenêtre. Vous obtenez maintenant la question numéro deux. Que sera-t-il verrouillé dans ce cas ? Comme vous pouvez le voir ici, nous avons un objet avec titre et méthode GetItems dans la méthode get item, connexion console de travail ici , nous appelons item dot get item. Dans le cas des objets, lorsque nous avons des méthodes à l'intérieur d'objets, nous faisons toujours référence à cet objet. Cela signifie que lorsque nous rechargeons la page, nous obtenons ceci et il s'agit d'un objet avec un titre et un élément obtenu. Dans ce cas, nous pouvons utiliser toutes les propriétés à l'intérieur notre objet car elles sont disponibles pour nous à l'intérieur Lorsque nous parlons d'objets, cela fait toujours référence à notre objet. Voici notre tâche numéro trois, qu'est-ce qui sera enregistré dans ce cas ? Comme vous pouvez le voir ici, nous n'avons pas d'objet mais d'une classe. Et nous avons également à l'intérieur du titre et de la méthode GetItems, et nous l'avons également à l'intérieur. Nous créons maintenant l' instance de notre classe et nous appelons une méthode GetItems à partir de notre instance. Il est important de se rappeler qu' à l'intérieur des méthodes de notre classe, lorsque nous avons une instance, nous avons une référence à notre instance, comme vous pouvez le voir dans le navigateur ici, nous avons ceci et nous pouvons voir ce mot élément. Cela signifie en fait que cet objet est une instance de notre classe d'articles. Et à l'intérieur, nous avons notre balle de titre. Nous pouvons utiliser toutes les propriétés de cette instance à l'intérieur de cette instance. Mais maintenant, nous avons une question : que se passera-t-il si nous choisissons une fonction à l'intérieur de notre méthode ? Donc, en fait, ce que nous écrivons ici est fonction, par exemple, une fonction. Et à l'intérieur, nous sommes juste dans ce journal de console. Et après cela, nous appelons simplement notre fonction de somme, ce qui signifie que nous définissons la fonction avec mot-clé fonction à l'intérieur de notre méthode et que nous l' appelons directement ici. La question est de savoir quel sera le journal de console à l'intérieur de cela ? Comme vous pouvez le voir dans le navigateur, cela n'est pas défini car, comme je l'ai dit, au lieu de cela, nous ne référençons pas la fenêtre, mais nous référençons un objet global. Et en fait, le mot-clé de fenêtre fait toujours référence à un objet global. Donc, dans ce cas, il ne fera jamais référence à notre instance. Et c'est important à retenir, qui signifie que si vous avez une fonction au sein de votre classe, cet intérieur ne sera pas correct. Il ne fera pas référence à notre instance de la classe et nous ne pourrons pas en utiliser les propriétés. Et exactement le même problème que vous aurez non seulement avec la définition de la fonction comme celle-ci, mais si vous écrivez, par exemple, une carte pour tableau à l'intérieur de votre objet get, et ici vous avez une fonction pour chaque article. Maintenant, si nous écrivons le journal de la console à l'intérieur, ce ne sera pas non plus correct. Comme vous pouvez le voir dans le navigateur, je suis en train de recharger la page. Nous ne sommes pas définis à trois reprises parce que nous utilisons ici mot-clé de fonction, puis définissons fonction qui le référence non défini. Ces deux variantes sont problématiques. Et maintenant, la question est de savoir comment y remédier et obtenir la référence à nos théories. Et nous avons deux solutions pour cela. Tout d'abord, la solution qui est plus ancienne, et elle est également utilisée lorsque nous sommes intégrés à JavaScript toute la version. Pour cela, nous pouvons simplement définir avant cela, par exemple, avec un trait de soulignement et nous attribuons une référence auditive à notre liste. Ce sera exact car nous sommes à l'intérieur de notre méthode. Maintenant, nous pouvons considérer ici non pas cela car ici les références sont fortes, mais cela a été souligné. Nous avons ici une autre référence. Rechargeons maintenant la page. Comme vous pouvez le constater, nous avons une référence de caractère à notre instance de comment objet. s'agit généralement d'une approche plus ancienne et il est utilisé dans l' étape de construction de JavaScript que la meilleure approche consiste à utiliser une fonction de flèche ici au lieu du mot-clé fonction. Nous pouvons donc simplement utiliser ici fonction flèche de magma Script six. Et maintenant, lorsque nous nous connectons à la console à l'intérieur de cela, il aura la bonne référence. Comme vous pouvez le voir, le résultat est exactement le même Parce que fonction flèche obtient le contexte de notre parent. Ce qui signifie qu' à partir de là, nous avons contexte que nous avons à l'intérieur de la guitare. Nous avons ici une référence à notre instance. C'est pourquoi je vous recommande vivement toujours utiliser les fonctions fléchées et non les mots-clés de fonction, et vous n' aurez alors aucun problème de contexte. Donc, pour résumer ce mot clé à l'intérieur de la fonction, vous avez toujours une référence à un objet global. À l'intérieur des objets, vous avez une référence à l'objet lui-même. Dans les classes, vous avez une référence à une instance de la classe et à la fonction interne, par exemple, à l'intérieur de la méthode ou directement à l'intérieur de la classe, elle sera référencée à non définie. C'est. 19. Cours: L'une des questions les plus populaires lors de l'entretien est bien sûr les cours. Vous pourriez avoir une question comme celle-ci. Concevez un cours pour employé qui prend un ADN nommé construction urinaire d'objets. Et voici une propriété cellulaire. Comme vous pouvez le constater, nous n'avons pas exigences très strictes ici et nous avons une certaine flexibilité pour la mettre en œuvre. C'est pourquoi je vous recommande vivement d'y réfléchir et de le mettre en œuvre de la meilleure façon possible. Tout d'abord ici, mais je voulais créer un cours et le nommer employé. Et maintenant, en tant que responsable, nous avons besoin d'un constructeur avec le nom DNS à l'intérieur. C'est y. Créons un constructeur et nous obtenons notre AD et notre nom. Et après cela, nous les assignerons au Sadie. Voici notre AD et ce nom est égal à nom. Nous allons donc obtenir ces deux propriétés. Mais vous pouvez le faire mieux car vous devez montrer que vous êtes un bon développeur. C'est pourquoi il est vraiment agréable de vérifier si nous sommes passés à l'intérieur de ces deux propriétés. Nous pouvons donc simplement ajouter, ok, si nous n'avons pas passé AD ou si nous n'avons pas passé le nom, alors nous voulons lancer une erreur. C'est pourquoi je voulais lancer ici à New Era. Et ici, nous pouvons écrire, par exemple, notre identifiant et notre nom d'employé sont obligatoires. Parce qu'en fait, c' est ce qu'il dit dans la tâche et il est agréable de couvrir cette fonctionnalité. De plus, comme vous pouvez le constater, nous avons une ligne et une propriété salariale, ce qui signifie que nous pouvons fixer le salaire. Ce n'est pas comme si on l'obtenait dans le constructeur. Nous avons besoin d'une fonction de réglage et d'obtention pour notre salaire. Tout d'abord, nous pouvons définir ce salaire fixe et ce sera une fonction, notre configuration pour le salaire, et nous passons à l'intérieur de notre salaire et nous le stockons à l'intérieur. Ce salaire est donc égal à notre salaire. Ce n'est pas tout parce que nous voulons également obtenir votre spectacle si le salaire est disponible dans notre classe. Mais nous voulons vraiment construire cette classe de manière avancée, qui signifie en fait un coupon pour avoir une API publique et quelques méthodes pour obtenir nos propriétés. C'est ainsi que je vous recommande vivement de créer, obtenir un salaire et nous n'avons besoin de rien ici, et nous voulons retourner ici ce salaire de point. Et il est également logique de créer deux getters pour notre identifiant et notre nom. Ici, nous pouvons créer une méthode GetID et à l'intérieur, nous retournons notre identifiant de point. Et nous pouvons également créer ici la méthode GetName, et cela retournera notre nom de point. Ainsi, comme vous pouvez le constater avec beaucoup de réflexion sur notre classe, et il est mis en œuvre du mieux que nous le pouvons. Maintenant, nous pouvons essayer de l'utiliser. Nous créons donc notre employé avec un nouvel employé et nous transmettons ID et le nom du site car ils sont obligatoires. Et en fait, nous pouvons le vérifier, nous pouvons recharger la page et nous obtenons l'identifiant et le nom de l' employé sont obligatoires. Et c'est agréable à vérifier. Voici notre nom 81, par exemple, check. Et maintenant, notre employé ne lancera pas d'erreur. Ce que nous pouvons faire maintenant, nous pouvons écrire salaire fixe des employés et nous passons, par exemple, 1000 à l'intérieur. Et maintenant, nous pouvons le vérifier. Je vais donc recharger la page et voici notre employé avec un nom DNS et un salaire, mais nous aurons aussi un getters, par exemple, obtient un salaire retournera à notre salaire et GetName retournera le nom. Ce qui signifie que nous avons mis en œuvre notre classe le mieux possible. Mais maintenant, vous avez une deuxième tâche. Concevez une classe pour le gestionnaire, qui est un employé et qui peut posséder une propriété du département , ce qui signifie votre intervieweur souhaite voir l'étendue de notre classe car nous pouvons créer une nouvelle classe basé sur notre classe d'employés. C'est y ici en bas, nous pouvons créer un nouveau gestionnaire de classe. Ici, nous voulons utiliser des extensions pour profiter des fonctionnalités de notre classe d'employés. Et en fait, c' est presque t dt. Cela va prendre tout de notre classe d'employés, mais nous devons également créer un département. C'est pourquoi nous avons juste besoin d'un passeur et d'un getter, comme nous l'avons fait auparavant. Créons ici un département défini et ici à l'intérieur, nous passons le département ou simplement le nom. Et ici, nous sauvegardons notre nom à l'intérieur, il faudra aussi obtenir, alors prenez le département. Et nous n'avons pas besoin d' arguments ici et nous voulons renvoyer notre département liste de points. Et en fait, il est également très important d'avoir de beaux noms partout. Comme vous pouvez le voir, je ne nomme pas des choses comme set ou tout simplement sur la terreur. J'essaie généralement de rendre ces noms aussi prêts que possible en production. Nous utilisons ici, par exemple, un département, des départements, donc il est clair de quoi il s'agit. Et cela montre vraiment sur l' entretien que vous êtes un bon développeur et que vous pouvez écrire du code de haute qualité. Ici, nous avons notre département et nous obtenons le département. Créons maintenant notre puce gérée. Nous créons donc simplement un nouveau gestionnaire et nous devons passer à l'intérieur, comme toujours, identifiant et le nom, par exemple John. Et maintenant, nous pouvons vérifier notre manager. Nous pouvons créer un département et nous le transmettons , par exemple, le développement. Nous pouvons maintenant vérifier notre manager. Nous n'avons donc pas dit département et il y a une fonction du département GET qui nous reviendra le ministère. C'est ainsi que vous répondrez généralement aux questions concernant les cours ou l' extension des cours. 20. Prototypes: Dans la vidéo précédente, nous avons parlé des cours et de la façon de les prolonger. Mais la prochaine question du réviseur du changement peut être des cours occasionnels. Mais avons-nous réellement des cours en JavaScript ? Nous avons autre chose car nous n'avons pas de classes en JavaScript et elles sont conçues comme un déclencheur pour les prototypes. C'est pourquoi nous devons maintenant concevoir exactement les mêmes classes simplement en utilisant des prototypes JavaScript sans utiliser de classes. Et en fait, vous devez le faire au moins une fois. Et puis, vous savez, quels sont les problèmes ici ? Tout d'abord, nous avons notre employé de classe et deuxièmement, gérons la puce, et maintenant nous voulons la refléter aux prototypes. Tout d'abord, nous devons déplacer toutes ces méthodes l'extérieur, car en fait, nous pouvons les essayer à l'intérieur de la fonction. Et en fait, qu'est-ce qu'un prototype ? C'est une fonction. Nous n'utilisons pas de mot-clé de classe et j'utiliserai y ici parce que nous parlons de prototypes. Il s'agit donc de l'ancienne version de JavaScript. Donc ici, j'ai un employé var, et c'est juste une fonction normale typique avec mot-clé de fonction ici, nous obtenons un nom DNS. Et en fait, c'est aussi notre constructeur. Nous n'avons pas besoin de constructeur ici. Nous vérifions directement, ok, si nous avons une carte d'identité et un nom, alors nous lançons une erreur. Mais si ce n'est pas le cas, nous sommes assis ici cet AD et ce nom, ce qui signifie que c'est notre classe typique lorsque nous le faisons avec un prototype. Nous devons maintenant ajuster toutes nos fonctions. Comme vous pouvez le voir ici, j' ai ces fonctions et maintenant, au lieu de simplement fixer le salaire comme une méthode, nous devons l'essayer à l'intérieur d'un prototype. On parle d'un prototype de point d'employé, de salaire. Et ce sera une fonction. Ici, nous disons simplement un mot de fonction égal, et voici notre fonction. Et nous devons faire exactement la même chose dans toutes les méthodes. Ainsi, le prototype point point GetID est égal, et voici notre fonction et la même chose avec GetName et aussi avec un bon salaire. Voici un prototype, GetName est égal à la fonction. Mot-clé ici obtient le salaire également le même prototype d'employé, obtenir le salaire égal à la fonction. Et maintenant, nous avons réussi refactoriser notre classe en prototypage. Ce n'était pas si difficile parce que nous ne nous sommes pas étendus. Pour l'instant, je veux commenter le gestionnaire, donc nous ne recevons aucune erreur. Voyons maintenant et parcourons-le. Je suis en train de recharger la page et maintenant nous avons ici notre employé, comme vous pouvez le voir, le code est exactement le même. C'est l'exemple de l'employé. Ici, nous avons, par exemple, la méthode GetID. Nous en avons un. Ici, nous avons des salaires pour que nous puissions gagner et obtenir un salaire. Et tout fonctionne, qui signifie que c'est ainsi que vous affectez votre classe. Deux prototypes. Et maintenant, nous avons un manager et nous étendons, et ce sera plus difficile. Nous avons donc un gestionnaire, nous avons dit département et nous avons obtenu le département. Et oui, cela doit également être une fonction. Donc ici, nous pouvons juste écrire var. Nous avons ici notre manager et nous savons que c'est une fonction. Nous n'aurons pas non plus dit département et nous ferons entrer le département à l'intérieur. Nous les écrirons ensuite. Mais là aussi, le problème, notre manager étend notre employé, mais nous sommes dans les mêmes paramètres et nous ne voulons pas écrire ici l'identifiant et le nom, mais nous pouvons simplement l' essayer ici, params. Et nous voulions juste jeter tous les champs que nous obtenons et utiliser ici notre employé. Et pour cela, nous pouvons écrire du code comme celui-ci. Nous pouvons écrire les jeux d'application. Ici, à l'intérieur, nous passons ces arguments de coma. Et ce que cela fait essentiellement, il utilise ici des arguments de cette fonction, ceci. Et comme vous pouvez le voir ici, j'ai également écrit des programmes ne les utilisaient pas pour l'instant. Mais si vous obtenez une tâche pour étendre le gestionnaire avec un champ, vous pouvez les écrire ici, par exemple, l'image est égale à l'image params dot. Et dans ce cas, vous devez également transmettre votre manager et une image. C'est tout à fait possible, mais nous n'en avons pas besoin pour notre tâche. C'est pourquoi nous utilisons simplement ici un employé appliquer ces arguments et ce qu' il fait, cela fait littéralement une partie de notre employeur. Comme vous pouvez le voir ici, nous avons cet identifiant et ce nom, et en fait, nous appelons cette fonction, mais nous lui donnons un autre contexte dans le contexte de notre manager et les le contexte de notre manager arguments de cette fonction. fonction. Mais voici une énorme différence que je veux vous montrer lorsque nous passons au navigateur. Et ici, dans le prototype de gestionnaire, vous pouvez voir ici sur une fonction constructeur. Mais ici, si je veux écrire un prototype d' employé, vous pouvez voir ici toutes les fonctions que nous avions auparavant ici en haut, car en fait cette seule ligne n' appelle que le constructeur de l'employé . Cela n'a rien à voir avec ce prototype, qui signifie en fait que cela fonctionne dans prototype d'employé et de gestionnaire ne les obtient pas. Et c'est très important parce que nous étendons cette classe. Cela signifie que nous voulons les avoir directement à l'intérieur notre prototype et nous voulons les copier. Comment pouvons-nous faire cela. Nous pouvons écrire ici le prototype de point de gestionnaire égal, et ici nous voulons utiliser la création d'objets car nous voulons cloner notre prototype d'employé. Et à l'intérieur, nous passons le prototype de point de notre employé. Dans ce cas, nous clonons toutes ces fonctions depuis notre employé jusqu'à notre prototype de manager. Alors, voyons ce que nous avons ici. Je suis en train de recharger la page et ici , le prototype de point manager. Et comme vous pouvez le constater, il s'agit maintenant d'une copie de notre employé. Et nous pouvons écrire ici le prototype de point de gestionnaire, point GetID par exemple. Et nous obtenons cette méthode. De toute évidence, il n'est pas défini car il agit pas d'une instance mais de la classe, mais nous avons accès à cette méthode à l'intérieur. Mais voici aussi un énorme problème lorsque nous écrivons ici le constructeur de points prototype de point manager. Nous obtenons le constructeur de notre employé et nous ne le gérons pas et c'est faux. C'est pourquoi ce que nous devons écrire ici aussi, gestionnaire de points prototype constructeur de points. Et nous voulons attribuer ici notre fonction de manager. Dans ce cas, il sera correct à 100%. Et comme vous pouvez voir où j'arrive en référence à notre manager, sont deux lignes qui sont très importantes lorsque vous faites de l' étendue avec un prototype. Parce que tout d'abord, vous voulez obtenir toutes les méthodes de notre employé. Et deuxièmement, vous devez remplacer, construire un retour à notre manager. Et maintenant, nous pouvons utiliser le département SAT et obtenir le département. C'est exactement la même chose qu'auparavant. C'est un prototype de point de gestionnaire. Et ici, nous affectons notre département set et ici manager dot prototype.js département. Ici, bien sûr, nous devons écrire le mot-clé de fonction exactement le même devrait être ici en haut. Dans ce cas, nous avons implémenté avec succès manager, comme il a été fait les cours précédents de Lucas. Rechargeons notre page et vérifions. Comme vous pouvez le voir, nous obtenons notre responsable avec ID et nom, mais nous aurons également un jeu de fonctions Department. Nous pouvons écrire, par exemple ici le développement. Et maintenant, nous n'avons pas dit Manager, aussi développement. Et nous avons une bonne fonction de département GET. Et évidemment, nous pouvons utiliser la même fonction. Par exemple, obtenez une carte d'identité de notre parent et cela fonctionne également. C'est généralement à cette personne que vous utiliserez des prototypes et implémentez des classes avec des prototypes natifs dans JavaScript. 21. J’ai échoué Interview. Qu’est-ce Qui Est Prochain ?: Il se peut qu'il ait juste échoué à votre entrevue et peut-être que c'était votre première entrevue et que vous vouliez vraiment ce travail et maintenant vous êtes vraiment déprimé. Que devriez-vous faire ? Tout d'abord, vous devez comprendre que c'est tout à fait normal et que vous échouerez beaucoup d' entretiens au cours de votre vie, et j'en ai échoué beaucoup, surtout au début. C'est pourquoi ce que vous devez faire, vous voulez tout d' abord continuer. Vous ne devez pas vous arrêter juste après votre premier entretien et même après votre cinquième entretien, vous ne devriez pas vous arrêter car tôt ou tard, vous trouverez votre première entreprise et vous obtiendrez votre premier emploi. Tout d'abord, vous ne devriez pas être déprimé. Deuxièmement, vous devez utiliser entretiens comme source supplémentaire de connaissances car c'est un endroit agréable pour comprendre quelles questions vous ont été posées lors de l'entretien. Et vous pouvez également comprendre les connaissances que vous aimez. C'est ici qu'il y a deux points principaux que vous devez faire. Après chaque entretien. Juste après l'entrevue, vous devez vous asseoir et écrire toutes les questions qui vous ont été posées et vous n'avez pas répondu correctement, il n'a pas répondu à. Après cela, vous devez Google toutes ces questions et les apprendre. De toute évidence, vous ne pouvez pas tout apprendre en une journée, mais vous pouvez partager ces connaissances et apprendre quelque chose de nouveau pour vous. C'est vraiment important de le faire directement après, car dans l'autre cas, vous l'oublierez. Le prochain point important est de demander la réponse de l'entreprise. Et en fait, il se peut que vous n'ayez pas reçu de lettre ou d'appel téléphonique après votre entretien de la part de l'entreprise. Et cela peut se produire dans de nombreuses entreprises. C'est ici que vous devez rédiger votre tableau avec qui vous avez parlé au moins deux fois, peut-être dans le jour ou deux après l'entrevue, puis peut-être dans trois jours après, car vous devez obtenir une réponse. Et s'ils ont dit que vous n'avez pas réussi l'entretien, vous devez demander la révision technique de votre entretien. Vous pouvez simplement demander, ok, c'est PT, mais ils veulent vraiment des commentaires. Quelles connaissances j'aime ? C'est tout à fait normal et en fait, ils ne fourniront pas de commentaires techniques très souvent, mais ils peuvent parfois le faire. Et cela vous est également extrêmement utile car vous verrez vos connaissances du point de vue d'une autre personne. Votre intervieweur peut écrire quelque chose qui est extrêmement important pour vous d'apprendre. C'est pourquoi il ne faut pas se décourager si vous n'avez pas réussi l'entretien, c'est tout à fait normal et vous devriez simplement continuer. 22. Modules: Vous pourriez également avoir une question concernant le système modulaire. Ils signifient par ce script EPMA six modules ou modules js communs. Par exemple, votre question peut être créée un module Atmosphere Crypt six avec des fonctions GetName, surname et expert par défaut obtenir le nom complet. Pour cela, vous devez savoir que Harmodius fonctionne en JavaScript simplement parce que c'est le composant central de JavaScript et que nous utilisons des modules partout. Pour utiliser les entrées, nous devons créer un autre fichier. Comme vous pouvez le voir ici, j'ai les principaux JS. Il s'agit de notre fichier principal et de notre index HTML. Disons donc que nous sommes en train de créer un nouveau module et que nous voulons le nommer. Par exemple, par exemple, les scripts doivent pointer js. À l'intérieur, nous allons écrire un module Atmos Script six. Tout d'abord, ici, nous voulons créer une méthode GetName, et nous l'écrivons avec export const. Voici GetName, et nous obtenons ici comme nom d'argument et nous retournons notre nom. Comme vous pouvez le voir ici, nous utilisons l'expert en construction const, et c'est exactement l'une des fonctions que nous devons créer. Et comme vous pouvez le voir, obtenez un nom et obtenez son nom. Je n'ai juste pas nommé les fonctions. C'est pourquoi nous les écrivons et nous sommes experts en eux à partir de ce module a été export const. Je vais copier cette ligne et la coller ici et nous devons la nommer. Obtenez un certain nom. Ici, nous obtenons un certain nom et nous ne faisons que retourner notre nom de famille. La dernière chose que nous sommes la note de masque est nom expert par défaut, oublié. Et si vous ne savez pas comment créer un expert par défaut, il s'agit de l'exportation par défaut. Et ici, nous n'avons pas besoin de fournir un nom, ce qui signifie que nous avons directement une fonction dans notre cas, peut-être que nous pouvons le créer comme ceci, nom et le prénom et que nous le concaténons. Et à l'intérieur, nous avons une chaîne cryptique Atmos et nous appelons ici nos fonctions. Tout d'abord, GetName et nous passons à l'intérieur du nom. Après cela, nous avons un espace ici, nous avons une deuxième fonction, obtient son nom partout où le nom de famille du bison à l'intérieur. Maintenant, notre fichier script six chaises est un module et il est complètement isolé. Et sur ce que nous sommes experts, il est disponible à l'extérieur, alors utilisons-le maintenant. Nous avons ici trois fonctions biomasse saute nos chaises principales ici, nous devons les importer et nous les saisissons comme ceci, important. Ensuite, nous avons des crochets et à l'intérieur de ce que nous entrons, c'est GetName, Coleman obtient son nom. Et comme vous pouvez le voir, mon rédacteur en chef a vieilli la route d'ici à mon scénario six. Et comme vous pouvez le voir, c'est bien sûr noir car nous n' utilisons pas ces fonctions. C'est ici que je veux écrire GetName et nous passons. Donc, par exemple, JAK , nous avons ici le nom de famille, et voici le moineau. C'est ainsi que nous entrons et utilisons des experts en noms. Nous utilisons ici l'importation de mots, puis des crochets et à l'intérieur des fonctions nommées. Dans notre cas, GetName, obtient son nom de, et c'est le chemin d'accès à notre fichier ECMO scripts dot js. Maintenant, la question est de savoir comment obtenir notre expert par défaut et pour ce week-end, juste après l'entrée, obtenir le nom complet puis une virgule. Dans ce cas, nous obtiendrons d'abord notre expert par défaut, puis des experts nommés uniquement avec des crochets par la suite. Maintenant, dans notre journal de console, nous pouvons utiliser get FullName et nous passons dans le site deux chaînes. Tout d'abord Jack et deuxième moins parallèle. Et maintenant, nous pouvons utiliser ces fonctions comme elles ont été définies dans ce fichier de position. Maintenant, la question est de savoir comment utiliser module EKG prescript six dans notre code HTML. Pour cela, nous devons sauter à l'intérieur de notre code HTML. Nous avons ici un script avec la source Manchester. C'est tout à fait correct, mais nous devons écrire ici le module de type et ensuite il l'importera comme le module Atmos Script six. Essayons maintenant de recharger notre page. Comme vous pouvez le voir, en fait, cela a fonctionné mais nous obtenons une erreur de cours et nous obtenons une erreur de cours parce que cet index HTML pays vraiment fort Les échecs principaux parce que vous ne pouvez pas faire de demandes d'origine croisée à partir d'un fichier. Et c'est en fait un problème car ici j'utilise ce fichier source tout comme le fichier HTML d'index normal. Si vous utilisez un framework frontal comme le réacteur angulaire, vous n'aurez pas de problème car vous avez des systèmes à modules, ils sont prêts à l'emploi. Mais exactement pour ce cas particulier où j'ai joué un index HTML, je dois servir cet index HTML comme un serveur Web. Et pour cela, il existe un paquet qui s'appelle service. Vous pouvez l'installer était connu d'échecs, et comme vous pouvez le voir maintenant, il est disponible pour moi juste cet index HTML sur localhost 3 mille. Maintenant, comme vous pouvez le constater, nous n' avons pas d'erreur concernant le cours, mais nous avons un problème pour charger notre fichier atmosphère crypt six, car en fait, ici, nous devons mettre dot js pour charger ce fichier. Maintenant, nous ne recevons pas la Sarah. Et comme vous pouvez le voir console, ces anciennes fonctions sont disponibles rapidement. Ici, on peut voir Jack Sparrow et Jack Sparrow. Cela signifie que nous avons entré avec succès ces trois fonctions a été nommé expert et exportation par défaut à partir de notre module à l'aide des modules Atmos group six. Nous avons maintenant une question suivante. Nous devons créer exactement la même chose avec le module js commun. Et si vous ne le savez pas, le modèle SIG commun est généralement utilisé à l'intérieur de chaises connues. C'est pourquoi je voulais maintenant écrire notre fichier JS Atmos Script six avec l'utilisation de chaises communes. C'est pourquoi je vais copier la tabulation collée et créer ici un nouveau fichier, nommez-le common dot js. Et nous allons tout réécrire ici. Dans le module js commun, vous pouvez faire de même. Vous ne pouvez pas avoir simultanément d' experts en matière d'exportation et de nommage par défaut. Et c'est parce qu'au lieu d' exporter const, partout où je mets ici, module.export dot getName, et nous assignons une fonction ici. Le point principal est de savoir si Book veut écrire un expert par défaut où ICT et au lieu d'exporter le module par défaut.export est égal. Et voici notre fonction, ce qui signifie que nous avons ici un modèle par défaut pour notre fonction. Donc, ce que nous pouvons faire dans ce cas, c'est simplement laisser ce GetName et obtenir le nom de famille comme fonctions privées car nous les contrôlons simultanément sans expert par défaut. Et comme vous pouvez le voir ici, nous avons des experts du module uniquement pour avoir notre expert par défaut. Maintenant, nous pouvons sauter directement à Manchester et ici importer notre fonction par défaut. Mais pour ce faire, nous devons utiliser le mot-clé requiert. C'est pourquoi je veux écrire const ici et nous obtenons un grand nom complet. Et ici est égal à besoin, et voici notre chemin commun JS ou tout simplement commun. Je peux sauter à l'intérieur de la console et des échecs principaux du nœud droit. Et évidemment, nous recevons un message que GetName n' est pas défini car ici nous essayons de consoler le journal GetName et d'obtenir le nom de famille. Maintenant, je viens de recevoir FullName. Essayons encore une fois. Comme vous pouvez le constater, nous n'avons aucune erreur et nous recevons des chèques parents. Si nous voulons vraiment obtenir les trois fonctions, nous devons sauter ici et simplement utiliser partout module.export dot et ici sera notre GetName. Maintenant, voici plus à votre point d'experts point obtient le nom de famille. Et ici, nous voulons plus d'experts en points sarcelle et voici un bon nom complet. Dans ce cas, cela fonctionnera et nous obtiendrons nos trois fonctions. Nous avons maintenant trois experts. On peut revenir à Manchester. Et ici, au lieu d'obtenir un nom complet, nous pouvons simplement détruire et obtenir trois fonctions. Getname, obtient son nom, et voici FullName. Et maintenant, nous pouvons décommenter ces deux journaux de console. Jetons un coup d'œil à ça. Je saute dans la console et j'exécute Node Manager et nous obtenons toujours un GetName agile qui ne l'est pas. Mais en fait, le problème ici est qu'à l'intérieur de js communs, nous n'avons pas de fonction GetName et obtenons le nom parce qu'en fait nous les avons dans les experts du module. C'est pourquoi ce code ne fonctionnera pas. Berlin doit écrire, tout d'abord, constituer le nom, puis après ce module, les experts pointent GetName et ici est égal à GetName. Dans ce cas, cette fonction peut également fonctionner. Nous devons faire exactement la même chose pour notre nom de famille. Voici const obtenir le nom et passons au sommet. Et maintenant, voici nos experts GetName, et maintenant nous avons le nom de famille et nous assignons ici notre fonction obtient Ernie. Dans ce cas, toutes les fonctions sont disponibles pour nous dans ce fichier et également à l'extérieur par l' intermédiaire d'experts du module. Jetons un coup d'œil à ça. Je cours les échecs principaux du nœud et nous n'avons aucune erreur. Comme vous pouvez le voir, nous avons deux variantes différentes à mon scénario, six et un coffre commun. Et si vous avez attrapé toutes ces questions, alors la question suivante pourrait être Quelle est la différence entre les modules Atmos Script six et les modules js communs. Et en fait, SAL fait ce set. Les modules d'échecs courants sont généralement utilisés à l'intérieur du coffre connu. Il s'agit du système modulaire standard pour les six modules ECMO Script connus que nous avons dans le navigateur. Il s'agit d'ECM Script six JavaScript. Et en fait, vous pouvez utiliser ECMO Script six modules à l'intérieur des fauteuils de nœuds. Et c'est juste un besoin de sucre. C'est pourquoi si vous supposez un post-script six modules non échecs, vous savez qu'à l'intérieur, vous avez toujours besoin car il est obligatoire pour NodeJS. Scripts de démonstration : six modules sont tout d'abord plus récents que les modules js courants, et deuxièmement ils sont statiques, qui signifie que vous pouvez emballer cela à l'intérieur si condition, par exemple, à l'intérieur de la boucle pour. . Mais vous ne pouvez pas vraiment le faire avec l'entrée car l'entrée doit toujours être en haut. Et si l'entrée n'est pas en haut , elle s'affichera automatiquement vers le haut lorsque JavaScript l'analyse. Et c'est en fait beaucoup mieux, tout d' abord pour la sécurité. Deuxièmement, implémenter différents outils intégrés sur le dessus des modules Atmos Script six. 23. Implémenter la fonction de Déjeuner: L'une des questions qui se posent ici de temps à autre est d'écrire la fonction osseuse. Et si vous ne savez pas quels sont les os, cela signifie que la fonction ne sera appelée qu'après un certain temps, qui signifie que chaque appel de cette fonction sera retardé. Comment pouvons-nous mettre en œuvre cette fonction ? Tout d'abord, nous devons créer une fonction que nous voulons pour les os. Ici, je veux créer une fonction, par exemple, enregistrer les entrées. Et ici, nous sommes fournis à l'intérieur de notre nom. L'idée est donc qu'à l'intérieur nous allons simplement consigner quelque chose. Et nous pouvons voir que cette fonction fonctionne. Voici la sauvegarde de l'entrée et du nom. Et nous utilisons la fonction Bonds. Par exemple, lorsque nous voulons envoyer des informations au back-end, l' utilisateur saisit quelque chose dans le champ de saisie. Et nous voulons attendre, par exemple, 200 millisecondes ou deux secondes après que la personne cesse de taper quelque chose dans l'entrée. Dans ce cas, les élèves n'ont envoyé au back-end qu'une seule demande pour vérifier la validation et pas beaucoup de demandes après chaque lettre. C'est exactement pourquoi nous avions besoin de ces os. Nous avons donc notre fonction d'entrée de sauvegarde et maintenant nous voulons l' appeler les os. Par exemple, nommons le changement de processus. Ici, nous voulons utiliser une fonction SGBD que nous allons créer dans une seconde à l'intérieur, nous devons tout d'abord fournir notre fonction, c'est économiser l'entrée et deuxièmement, retarder, par exemple, deux secondes. Après cela, nous pouvons simplement appeler le changement de processus avec une chaîne. Et peu importe le nombre de fois que nous appellerons cette fonction l'idée principale, elle sera appelée sur celles. Au bout de deux secondes. Ici, je veux enregistrer une nouvelle fonction, les os. Et ici, nous sommes en train de se disputer. Tout d'abord, une fonction, appelons-le funk. Et deuxièmement, notre délai d'attente. Et c'est une bonne approche pour définir le délai d'attente par défaut, exemple, à 300 millisecondes. Cela signifie qu'il n'est pas obligatoire de fournir. Et maintenant, à l'intérieur de notre fonction de décollage il faut renvoyer une fonction. Parce que, comme vous pouvez le voir ici, nous appelons la fonction os et le changement de processus est également une fonction dans laquelle nous pouvons fournir des données pour notre fonction d'entrée savory, qui en fait signifie ici que nous devons revenir et que vous travaillez. Ici, nous voulons répandre nos arguments. Et voyons ce que nous sommes opposés. Donc ici, je veux consoler les arcs de virgules de la fonction de connexion, et nous pouvons voir dans quel format nous les obtenons. Je suis en train de recharger la page. Comme vous pouvez le constater, nous recevons quatre fois car nous appelons cette fonction quatre fois dans une fonction. Et ici, nous n'avons qu' un seul argument foo. Mais cette propagation avec args a transformé nos arguments en tableau car pour nous il est plus facile de travailler avec le tableau. La deuxième chose que nous voulons faire est de créer un minuteur et en fait un temps de groupe veut stocker dans la fermeture ici en haut. Ici, nous pouvons simplement laisser le minuteur sans valeur par défaut. Et maintenant à l'intérieur de notre fonction interne après notre lot de console avec juste voulu écrire SetTimeout. Ici, nous aurons une fonction et en fait le deuxième paramètre ici sera notre délai d'attente. Après quelle heure nous appellerons ce code à l'intérieur. Ce que nous voulons faire ici, c'est Func Dot Appliquer. Voici ce coma aurochs. Qu'est-ce qu'il a un moyen ? Nous utilisons ici la fonction des liens et nous fournissons ici la contribution de notre Sauveur. C'est notre fonction. Voici notre délai d'attente. Donc, en ce moment, ce changement de processus est cette fonction interne. Et après avoir appelé cette fonction, nous appelons cette partie. Ici, nous obtenons nos arguments. Dans notre cas, il s' agit d'un tableau avec foo. Ici, nous avons notre journal de console et cela générera SetTimeout, ce qui signifie que chaque ligne ici, lorsque nous appelons cette fonction, générera un SetTimeout. Avec ce délai d'attente, ce que nous faisons à l'intérieur où on appelle func. Nous appelons donc cette entrée de sauvegarde avec appliquer cette args, qui signifie en fait que nous voulons appeler cette fonction après le délai d'expiration avec le contexte correct, avec le contexte de cette fonction, avec ces arguments. Mais ici, nous avons un problème lorsque nous rechargeons la page. Comme vous pouvez le constater, nous obtenons quatre fois dans une fonction et après deux secondes en obtenant quatre fois l'entrée enregistrée. Et c'est faux, car ici, nous devons l'avoir sur ceux, parce que c' est en fait au niveau des os. Nous devons effacer notre minuterie à chaque fois que nous appelons la fonction, car dans ce cas, notre délai d'attente défini précédent doit être ignoré exactement pour ce que nous avons créé ici. Ce que nous pouvons faire ici, nous pouvons attribuer SetTimeout au minuteur. Et en fait, si vous ne connaissez pas SetTimeout, rendez-nous un numéro et c'est notre identifiant spécifique que nous pouvons nettoyer. C'est pourquoi avant notre minuterie, nous pouvons maintenant écrire un délai d'attente clair et à l'intérieur, nous pouvons fournir notre minuteur. S'il n'est pas défini, cela n'a pas d'importance, il ne fera rien. Mais si nous avons un AD , SetTimeout précédent sera détruit. Dans ce cas, chaque fois que nous appelons à nouveau cette fonction, tous les délais d'attente précédents seront arrosés et nous allons maintenant créer un nouveau délai d'attente défini. Et après cette période, nous appellerons notre fonction. C'est exactement l' idée des os. Rechargeons maintenant la page. Nous recevons quatre fois notre fonction interne, et maintenant nous recevons une entrée enregistrée juste une fois après deux secondes. Et c'est exactement ce que nous voulions lorsque nous avons mis en œuvre nos débits. Encore une fois, la fonction osseuse nous permet d' appeler quelque chose qu'une fois après un certain temps. C'est vraiment important lorsque nous parlons de quelque chose que l'utilisateur peut appeler plusieurs fois lors de la saisie dans le formulaire, par exemple. 24. Implémenter la fonction d'étranglement: Nous avons mis en œuvre avec succès la fonction osseuse. Mais vous pourriez également vous demander comment implémenter la fonction d' accélérateur. Et en fait, ils sont super similaires. Et c'est pourquoi j'ai le code de notre fonction os parce que nous devons vraiment changer comme 1% du code. L'idée de la fonction d'accélérateur est donc qu'elle sera exécutée immédiatement. Et juste pour vous rappeler que la fonction os sera exécutée le ou après notre délai d'attente. Ici, la fonction d'accélération l'exécute immédiatement, mais après cela, la colonne de la fonction est complètement ignorée pour notre équipe, ce qui signifie en fait que si l'utilisateur tape quelque chose, nous pouvons Appelez notre fonction uniquement au début, puis à chaque fois, donc toutes les deux secondes, par exemple. Et c'est exactement le but principal de l'accélérateur. Pour le simuler, nous devons modifier un peu notre code. Nous avons ici la contribution de notre Sauveur. C'est très bien. Voici un changement de processus, mais nous ne voulons pas utiliser ici les os voudraient l' écrire avec accélérateur. Les arguments sont exactement les mêmes. Et maintenant, nous appelons le changement de processus au début. C'est très bien, mais maintenant je veux simuler que nous l' appelons avec SetTimeout. Ici, nous avons raison et SetTimeout, et nous voulons appeler ce changement de processus de fonction à l'intérieur après un certain temps, par exemple, après 1 seconde, puis je copierai ce setTimeout et exécuterai après 1 seconde, 200 millisecondes. Maintenant, je copie le coller à nouveau, et j'appellerai cette fonction à nouveau après deux secondes et 400 millisecondes, puis je supprimerai deux derniers tracés qui ont changé. En fait, comme vous pouvez le voir ici, nous avons mis un délai d'attente de 200 millisecondes, qui signifie que cette fonction doit être exécutée immédiatement. Ce SetTimeout sera ignoré. Cela sera également ignoré et le téléchargement du dernier délai défini appellera cette fonction car elle se produira après ce délai sur 200 millisecondes. Tout d'abord, changeons le nom de nos os pour accélérer. Nous avons ici les mêmes arguments, une fonction et notre délai d'attente. Mais maintenant, nous n'avons pas besoin d'un identifiant de minuterie, mais d'un booléen. Et ce booléen va nous montrer si nous pouvons réexécuter cette fonction. C'est pourquoi pas le délai de livraison, mais le lead, par exemple, attend et par défaut, il est faux. Maintenant, nous retournons également une fonction dont nous n'avons pas besoin ici, effacer le délai d'attente. Et en fait, SetTimeout reste ici, mais nous n'avons pas besoin de temps car en fait, nous interdisons ce SetTimeout avec une condition si ici. Nous pouvons écrire si ce n'est pas en attente, alors nous voulons appeler ce setTimeout. Dans d'autres cas, nous n'appellerons rien et ce code sera simplement ignoré. Il est également important que nous appelons directement cette fonction. C'est pourquoi je veux le déplacer à l'intérieur de notre condition et de nos insights SetTimeout, nous changeons simplement notre poids dans la propriété en faux dos. Comme vous pouvez le voir, cette ligne signifie qu' au début du premier appel, nous appellerons cette fonction. Mais après cela, nous voulons que notre drapeau soit vrai. C'est là où je n'ai pas attendu, c'est vrai. Ensuite, nous avons un délai d'attente défini, par exemple deux secondes. Et après deux secondes, nous sommes en attente de faux, qui signifie que nous pouvons appeler cette fonction après deux secondes et non avant. Comme vous pouvez le constater, le code est identique à 99 %. L'idée principale est que nous construisons ici est le poids et le drapeau, et nous permettons simplement d'accéder à cette fonction une fois dans notre délai d'attente. Maintenant, vérifions si cela fonctionne. Je suis en train de recharger la page, nous économisons directement put foo la première fois. Et puis on voit sur Louvain CV entrée f2 deuxième fois. Et c'est exactement ce changement de processus de code et ce dernier mode de temps défini avec deux secondes et 400 millisecondes. Parce qu'en fait, lors notre premier essai, nous allons accélérer, attendons, c'est faux. Nous allons ici, nous vérifions une clé, ce n'est pas vrai. Ensuite, nous appelons directement cette fonction et nous définissons notre drapeau sur vrai. Et puis après notre délai d'attente fixé et puis nous changeons son poids et revenons à faux. Et nous n'avons pas besoin ici de RED car nous ne sommes jamais à bord de notre SetTimeout. La prochaine question que vous pourriez avoir. D'accord, mais quelle est la différence entre les os et l'accélérateur ? Et comme je l'ai déjà dit, nous appelons les os après que les utilisateurs se soient arrêtés pour faire quelque chose. Nous appelons l'accélérateur tout d'abord au début , puis après un certain intervalle de temps. 25. Mettez En Évidence Tous Les Mots De Plus De 8 Chars Avec Jaune: Vous pourriez également avoir des questions sur le fonctionnement de JavaScript. Par exemple, ici, nous devons mettre en évidence tous les mots de plus de huit caractères dans les textes de paragraphe à fond jaune. Et comme vous pouvez le voir ici, j'ai index.HTML et nous avons notre paragraphe, et nous avons notre paragraphe d' en-tête, et nous avons beaucoup de texte ici. Si vous souhaitez l'essayer vous-même, je lierai le code source dans la zone de description ci-dessous. Vous ne devez pas retaper ce texte en entier. Voici comment cela se présente maintenant, comment pouvons-nous mettre en œuvre cette tâche spécifique ? Tout d'abord, nous devons trouver notre paragraphe. C'est vraiment facile que nous n'ayons qu'un seul paragraphe. Ici. Nous pouvons dire que nous trouvons un paragraphe et voici un sélecteur de requête de points de document. Et ici ce P et ceci, vous pouvez voir que j'ai utilisé ici QuerySelector. Et c'est très important si vous essayez d' utiliser GetElementByID ou d' obtenir élément par classe, ce n'est pas la meilleure approche et détails que vous n'avez pas travaillé avec Tom pour correspondre. C'est pourquoi vous devez toujours utiliser QuerySelector ou QuerySelector. Oh, si vous voulez obtenir une liste de vos éléments, dans notre cas, nous n'avons qu'un seul élément. C'est pourquoi nous écrivons simplement ici p et nous recevons notre paragraphe. Nous pourrions également écrire ici un signe de dollar au début, tout comme dans le style jQuery. Par exemple, je préfère le faire trop facilement distingué par le nom, La différence entre deux éléments seulement et les éléments DOM. Mais pour l'instant, nous allons le garder comme un paragraphe. Mais nous voulons faire maintenant Poupon pour changer notre contenu de sorte que notre HTML intérieur, c'est pourquoi nous pouvons écrire un point de paragraphe HTML interne égal. Et nous voulons tout d'abord lire le paragraphe point innerHTML. Et comme vous pouvez le constater, c'est à quoi ressemble le contenu d'InnerHTML . Il s'agit donc d'une chaîne simple et maintenant nous pouvons travailler avec elle comme avec un flux JavaScript normal. Ce que nous voulons faire maintenant ici, nous voulons tout d'abord le diviser avec l'espace. Dans ce cas, nous obtenons un tableau de mots et nous pouvons maintenant utiliser la carte pour travailler avec chaque mot. Donc, en fait, nous sommes en train de recevoir mot et à l'intérieur, nous voulons vérifier si notre monde compte plus de huit symboles. Nous pouvons donc simplement renvoyer ici une longueur de point de mot supérieure à huit symboles. Ensuite, nous voulons écrire l'opérateur ternaire. Et si nous sommes plus grands que huit symboles, alors coupons-le pour l' envelopper en jaune, ce qui signifie que nous voulons écrire un autre nœud DOM à l'intérieur. C'est ici que je vais créer une div de chaîne avec du style à l'intérieur et à l'intérieur, nous sommes à droite et la couleur de fond, par exemple, jaune. Ici, nous devons fermer notre div et en fait, dv est mauvais. Nous devons utiliser ici span car il s'agira d'un élément intérieur à l'intérieur de cette travée où c'était juste dans notre monde qui était là auparavant. Donc, dans ce cas, nous revenons et vous ne savez pas. Et si nous n'avons pas changé le monde, nous reviendrons simplement ce mot. Comme vous pouvez le voir dans ce cas, tout d'abord, nous prenons notre chaîne dans le InnerHTML. Nous le divisons par mots avec un espace où cartographier chaque mot et nous vérifions la longueur. Dans ce cas, je retourne votre nœud DOM ou je retourne le mot lui-même. Et une fois notre carte terminée, nous devons tout rejoindre. C'est ici que nous nous joignons à l'espace, comme nous l'avons fait auparavant. Voyons ce que nous recevons. Je suis en train de recharger la page. Et comme vous pouvez le constater, tous nos mots qui dépassent huit symboles seront surlignés en jaune, ce qui signifie en fait des lignes initiales. Nous pouvons résoudre cette tâche. Vous pouvez effectuer différentes tâches concernant DOM. Ce que vous devez savoir, c'est comment obtenir des éléments de Dom, comment les supprimer, comment les mettre à jour et comment transformer éléments DOM directement en chaînes JavaScript, par exemple. Vous pouvez travailler avec eux. 26. Ajouter un lien: Une autre tâche stupide que vous pouvez obtenir consiste à ajouter un lien vers la source du texte après la balise de paragraphe. Et en fait, j'ai exactement le même HTML que perverse. Mais à la fin, nous devons fournir un lien vers notre source. Comment pouvons-nous résoudre ce problème ? Tout d'abord, nous devons créer un nouvel élément DOM. Maintenant, au cas où il s'agirait d'un lien, nous fournirons un graphique d' informations, puis nous allons l'ajouter à la fin de notre DOM. Tout d'abord, créons un lien. Pour cela, nous pouvons utiliser l'élément de création de points de document et à l'intérieur de l'utérus doit fournir élément DOM que nous voulons créer. Dans notre cas, il s'agit d'un a après cette boop veut être lié pour attribuer notre graphique. Donc, nous écrivons simplement link href égal dans le cas de déni, je le copierai d'ici. Il s'agira de HTTPS pour ipsum.com. Et nous devons également fournir des informations, un texte intérieur qui sera un contenu de notre lien. C'est pourquoi le texte intérieur lync dot. Et ici, nous affectons le texte généré à partir de Lorem Ipsum. Notre élément DOM est prêt. Maintenant, nous devons simplement le mettre à la fin de notre DOM. Nous pouvons écrire ici document corps de point, point ajouter enfant. Et ici, nous ne faisons que fournir notre nouvel élément DOM. Dans ce cas, il apparaîtra au bout de notre corps. Jetons un coup d'œil à ça. Je suis en train de recharger la page et à la fin, nous avons des textes générés à partir de Lorem Ipsum, et c'est un lien qui va sur la bonne page. 27. Divisez chaque phrase en une ligne séparée: Une autre tâche avec l' événement DOM peut être la suivante. Divisez chaque nouvelle phrase en une ligne distincte dans le texte du paragraphe. Une phrase peut être supposée être une série de textes terminés par un point. Et en fait, nous avons exactement le même texte à l'intérieur du paragraphe, comme nous l'avons fait précédemment. Maintenant, la question est de savoir comment mettre en œuvre cette tâche ? Et en fait, nous pourrions penser, d'accord, nous avons des règles, nous pouvons simplement le diviser par période. Essayons ça. Tout d'abord, je veux trouver ici notre paragraphe avec le sélecteur de requête de document p, comme nous l'avons fait précédemment. Et maintenant, nous pouvons écrire un point de paragraphe innerHTML est égal à point de paragraphe innerHTML. Nous voulons le diviser avec un point. Et vérifions ce que nous aurons dans ce cas, fois que nous l'avons divisé et que nous aurons une panoplie de nos forces, nous devons le rejoindre. Mais dans ce cas, nous voulons d' abord mettre ici point parce que nous nous joignons au DOD. Mais ensuite, nous avons besoin d'une balise close pour notre p et d'open tag pour notre nouveau p. Dans ce cas, nous écrivons des paragraphes pour chaque ligne et jointure n'est pas appliquée au dernier élément. C'est pourquoi, à la fin, nous voulons écrire plus, et ici nous devons fermer notre p. supplémentaire . Je suis en train de recharger la page et elle fonctionne , mais seulement partiellement. Oui, il fonctionne pour les phrases simples, mais il ne fonctionnera pas pour les phrases où nous avons deux ou trois points. Par exemple, comme vous pouvez le voir ici, nous avons des lignes avec un point dessus. Et c'est exactement le problème car ici nous le divisons d'un point et ce n' est pas le total du bouton, notre logique est correcte. Nous pouvons inspecter nos éléments HTML, comme vous pouvez le constater, ils sont correctement encapsulés, puis nous fermons notre liste p Ici. Cela fonctionne, mais le fractionnement par un point n'est pas notre cas. En fait, nous en arrivons à des expressions régulières. Et c'est une connaissance que vous devez apprendre, moins au niveau de base, car vous l'utiliserez dans de nombreux cas lorsque vous travaillez, par exemple, avec des chaînes et essayer de vérifier expression régulière, je vous recommande vivement d' utiliser un site Web, reg X.com. Il est entièrement gratuit. Vous pouvez trouver d'autres sites Web, mais ici, c'est vraiment agréable de voir ce que nous trouverons. Comme vous pouvez le voir ici, vous pouvez écrire une expression régulière et ici vous pouvez fournir le texte et vérifier son fonctionnement. Ici aussi, à droite, vous pouvez définir des indicateurs, par exemple, multiligne global, etc. Comme vous pouvez le constater, il s'agit de l'expression régulière que nous voulons écrire. Et quand je survole les symboles, cela vous montrera exactement ce que nous faisons ici. C'est le début de l'expression régulière, et nous enveloppons toujours l'expression régulière avec deux barres obliques. Cette barre oblique au début et à la fin n' est qu'un début et une fin de l'expression régulière. Maintenant, ici à l'intérieur, nous avons un point, mais le point est un symbole spécial à l'intérieur de l'expression régulière. C'est pourquoi nous devons y échapper avec la barre oblique inverse. Comme vous pouvez le voir ici, il ne correspond qu'à un point. Maintenant, nous avons ici des crochets. Et comme vous pouvez le voir, tout ce entre crochets est annulé, qui signifie que cela ne doit pas être là. Ce symbole actuel est le début de notre série. Et ici, nous avons pensé et ouvert le tag. Dans ce cas, nous ne cherchons qu'un seul point, mais pas plusieurs points. C'est tout ce que nous voulions dire ici. Et comme vous pouvez le voir ici, notre code fonctionne correctement. Et maintenant, nous n'avons ces correspondances qu'avec un seul point, comme vous pouvez le voir ici, nous avons trois points, le bouton se déplace. Le dernier point sera vérifié car nous ne nous intéressons qu' au point lorsque nous n'avons plus le deuxième point par la suite. C'est pourquoi nous pouvons copier-coller cette expression régulière et la placer dans notre division. Ici, je dois écrire une barre oblique au début et à la fin. Et c'est notre expression régulière. Et je comprends totalement si vous n' obtenez pas 100 % de ce que je fais ici, car vous devez d'abord apprendre quelques bases des expressions régulières. Mais ils sont extrêmement importants si vous travaillez avec des chaînes. Maintenant, vérifions si ce code fonctionne. Ici. Je saute dans la page que je suis en train de recharger, et maintenant ça fonctionne correctement. Nous avons fait notre séparation. Et ici, par exemple, trois points sont toujours là et c'est la seule phrase. Et lorsque nous avons un seul coup, nous considérons simplement la fracture puis nous déplacons ce texte sur la ligne suivante. Et en fait, la connaissance des expressions régulières est un peu en dehors de JavaScript, mais vous l'utiliserez toujours beaucoup. Mais aussi, si vous apprendrez ces expressions régulières, vous pouvez les utiliser dans toutes les langues. Parce que dans toutes les langues , c'est exactement la même chose. 28. Délégation d'événement: Vous pouvez également obtenir une question comme celle-ci implémentée en cliquant sur l'élément le plus rapidement possible. Et comme vous pouvez le voir ici dans index.HTML, nous avons un tel balisage. Nous avons une liste UL et à l'intérieur, nous n'avons que des éléments li. Généralement, vous pouvez le résoudre différemment. Nous avons ici deux solutions typiques, mais l'une est bien meilleure qu'une autre. En fait, ce que nous pouvons faire ici, nous pouvons trouver des objets en dollars avec un document et ici nous utilisons le sélecteur de requêtes tous. Et ici, comme vous pouvez le voir dans notre index.HTML, Lee avec l'élément de classe. Ici, je peux trouver notre article par classe, et nous obtenons ici une liste de nos articles. Après cela, nous pouvons parcourir cette liste de nœuds DOM. Et pour chaque élément, nous pouvons attacher un auditeur. Ici, nous pouvons écrire des points pour riches. Ici, nous avons notre objet qui est un nœud DOM. Et à l'intérieur, nous pouvons écrire l'élément point AddEventListener. Ici, nous avons notre clicker et voici notre gestionnaire. Ce que nous voulons faire lorsque nous cliquons sur l'article, au moins essayé certains textes concernant notre article. En fait, nous n'avons qu'une valeur à l'intérieur. C'est pourquoi nous pouvons écrire ici. Vous avez cliqué sur l'élément et ici nous pouvons simplement écrire plus le texte intérieur du point d'article. Donc, tout d'abord, nous avons trouvé la liste de nos éléments, puis pour chaque élément de la boucle, nous avons ajouté un écouteur d'événements. Jetons un coup d'œil à ça. Je suis en train de recharger la page. Nous voyons notre liste d'articles. Maintenant, nous cliquons sur un élément et nous obtenons un joli journal de console avec le contenu de cet élément. Nous cliquons sur une autre extrémité, nous obtenons le journal de la console et en fait, cela fonctionne et tout va bien, mais nous avons une tâche de le construire le plus rapidement possible. Et en fait, le problème est que si nous avons une liste super énorme, alors ce n'est pas assez performant. Parce qu'en fait, nous avons ici pour chacun, pour tous nos articles, ce qui signifie que nous avons ici une liste de cent, dix cents articles où ajoutons ici cent, dix cents auditeurs. Et c'est très mauvais pour notre performance. C'est pourquoi ce n'est pas la meilleure solution pour notre tâche. Ce que nous pouvons faire, nous pouvons trouver le parent ou pour notre liste. Et comme vous pouvez le voir ici, nous avons UL avec l'application Todo de classe. C'est ici que nous allons trouver l'élément d'application et nous pouvons utiliser ici document QuerySelector, et nous saurons que la classe est hors de faire application. À l'intérieur, nous pouvons maintenant joindre un seul écouteur pour notre élément d'application. Donc AB AddEventListener. Ici, nous avons notre clic et voici notre écoute. Et ensuite, dans l'événement ici, nous avons donc accès à notre événement. Et en fait, ce que nous voulons faire à l'intérieur, nous voulons vérifier quel élément nous ciblons. Parce que nous pouvons cliquer ici sur notre conteneur ou nous pouvons cliquer sur n'importe quel article à l'intérieur et vraiment très intéressé par le fait de cliquer sur l'article. C'est pourquoi nous pouvons écrire un K Si nous avons ici une cible d'événement, ce qui signifie que nous avons cliqué et que nous voulons vérifier ici si nos frais d'événement ont une classe de l'objet, cela signifie que nous avons chauffé notre LEA. C'est pourquoi nous pouvons essayer ici même toucher la liste de classes de points. Ici contient en fait la propriété de liste de classes à l'intérieur du nœud contient une fonction pour vérifier si nous avons une telle classe. Au cas où nous vérifions si nous avons cliqué sur notre article. Si c'est fait, nous pouvons copier notre verrou de console ici à l'intérieur et le changer un peu. Nous quittons notre ficelle. Vous avez cliqué sur item ici au lieu d'item.name dans un texte, nous pouvons écrire du texte point cible d'événement, et cela fonctionnera exactement de la même manière. Jetons un coup d'œil à ça. Je suis en train de recharger la page. Je suis caché ici sur certains objets et nous sommes gentils. Vous avez cliqué. Et en fait, si nous cliquons quelque part à l'extérieur, cela ne fait rien. Mais la principale différence dans ce code est beaucoup plus rapide car nous n'avons ici qu'un seul écouteur pour notre parent. Et nous ne générons pas des centaines de milliers d' auditeurs pour chaque élément. 29. Xml HTTP Demande: Vous pourriez avoir une entrevue sur la question, n'est-ce pas ? Exemple de récupération de données à partir d' API avec une requête HTTP XML. Et en fait, c'est une question très ancienne. Et normalement, les gens ne devraient pas poser cette question de nos jours et des entretiens, mais ils sont toujours là dans cette question beaucoup parce que certaines personnes veulent toujours savoir comment nous avons résolu notre recherche et problèmes il y a dix ou 15 ans. Dans les projets modernes, vous n' utiliserez jamais la requête HTTP XML nativement. C'est pourquoi il n'est pas logique de poser cette question, mais nous devons apprendre à y répondre. C'est pourquoi nous allons écrire un exemple de son fonctionnement. Tout d'abord, nous devons créer notre demande XHR. C'est pourquoi nous vous appelons une requête HTTP XML. Nous avons maintenant une instance de notre demande HTTP XML et nous pouvons dire quelle méthode nous voulons envoyer et sur quelle URL. C'est pourquoi nous avons raison et la chaise XC est ouverte. Et comme vous pouvez le voir ici, nous avons deux paramètres. Tout d'abord, c'est la méthode. Ici, nous voulons écrire GED car nous faisons une demande GET. Et voici notre URL API et je vais coller ici et l'URL de l'API de github comm pour récupérer tous les référentiels de cet utilisateur spécifique. Après cela, nous sommes en XHR point cn et crochets ronds. Mais ce n'est pas tout. Nous devons également préciser ce qui se produira en cas de succès et d'erreur. Et pour cela, nous écrivons XHR point sur Lord. Et ici, nous devons attribuer une fonction. Et à l'intérieur de cette fonction, vous voulez tout d'abord vérifier quel statut nous sommes en train de récupérer. Nous pouvons donc écrire ici si le graphique xy état n'est pas égal à 200, ce qui signifie qu'il n'est pas réussi, alors nous voulons consoler une erreur. Je veux écrire ici, par exemple, flèche en dernier et peut-être la fenêtre d'état XHR, et ici le texte d'état XHR. Dans ce cas, nous pouvons directement voir quel problème nous avons dans l'autre cas où nous obtenons le succès. Nous allons donc écrire le succès du journal de la console. Et après cela, nous passons à la lecture de notre réponse au point XHR, où nous avons notre réponse à l'intérieur et nous voudrons également vérifier l'erreur dans les demandes de diagramme xy. Donc, ici, nous pouvons écrire un point de diagramme xy en cas d'erreur. Et juste pour vous rappeler que tout est en minuscules et on nous attribue une fonction ici. Et à l'intérieur, nous pouvons écrire, par exemple, la demande de frais supplémentaires du journal de console a échoué. C'est ainsi que vous définissez généralement la fonction XHR. Tout d'abord, nous créons une instance de requête HTTP XML. Ensuite, nous ouvrons notre méthode et notre URL. Ensuite, nous obtiendrons du sable, puis nous avons la fonction onload et la fonction on error pour gérer à la fois des statuts incorrects ou une flèche avec une requête. Maintenant, vérifions si cela fonctionne. Je saute dans le navigateur et je recharge la page. Et comme vous pouvez le voir ici, nous obtenons notre réponse et nous obtenons succès de notre journal de console également dans notre réseau Vous pouvez voir que nous avons une enveloppe de requête et qu'il s'agit d'une demande XHR. Et comme vous pouvez le constater, c'est notre aperçu. C'est notre réponse du backend. Cela signifie que nous avons réussi à implémenter notre demande de récupération à l'aide de la requête HTTP XML. 30. Fetch API: Une autre récupération et la récupération de données à partir de API sont un peu plus à jour. C'est ce que nous utilisons tous les jours. Vous avez une question ici, n'est-ce pas ? Exemple de récupération de données à l'aide de l'API Fetch. He Pi est un moyen moderne de charger certaines données à partir de l'API. Et en fait, je n'ai pas supprimé la requête HTTP XML. Vous pouvez comparer le code que nous avons écrit il y a dix ans. Et maintenant, nous pouvons utiliser la fonction fetch et nous fournissons simplement une entrée et get est la méthode à l'intérieur de fetch par défaut, ce qui signifie ici que nous devons fournir juste une URL. Le plus important, c'est que Fetch nous rende une promesse. Et cela signifie que nous pouvons utiliser ici et attraper pour obtenir des résultats. Nous avons ici notre réponse, mais normalement nous voulons convertir notre réponse en JSON. Dans ce cas, nous pouvons facilement utiliser ces données dans le client. C'est ici qu'il va réserver à froid res.json, qui est une fonction asynchrone et qui transformera notre réponse en JSON. Et après cela, nous pourrons les appeler à nouveau. Et ici, nous obtiendrons nos données. Maintenant, nous pouvons travailler avec ces données, par exemple, succès du journal de console, et voici nos données. Et comme vous pouvez le constater, ce code est beaucoup plus petit et plus facile à lire que cet ancien code avec requête HTTP XML. Et évidemment, nous avons également écrit une erreur ici et nous voulons également la gérer ici. C'est pourquoi nous pouvons écrire ici une cage à points. Ici, nous aurons notre ère. Et maintenant, nous pouvons écrire l'ère du journal de la console. Et cela se déclenchera lorsque nous aurons une erreur. Voyons maintenant si ce code fonctionne, je recharge la page dans le navigateur et comme vous pouvez le constater, nous obtenons un succès. Voici notre réponse. Et comme vous pouvez le voir à l'intérieur du réseau, nous avons notre demande rapide et le type est récupéré. Et voici notre réponse, qui signifie que ce code fonctionne exactement de la même manière, mais il est basé sur des promesses, qui signifie que nous pouvons facilement mélanger ce code comme n' importe quel autre code asynchrone basées sur les locaux. Par exemple, si vous avez deux ou trois sources, par exemple, si vous disposez de plusieurs sources de données, vous pouvez facilement les combiner car elles sont toutes basées sur des locaux. 31. Rappel de base: Vous pourriez recevoir une autre question concernant un JavaScript synchrone. Par exemple, écrivez une fonction asynchrone qui exécute Kohlberg après avoir terminé sa tâche asynchrone. Et en fait, si vous ne le savez pas en JavaScript, nous utilisons beaucoup de rappels. Et auparavant, avant les promesses et le poids unique, nous avons utilisé le rappel pour récupérer des données, même maintenant, Kohlberg est moyen très populaire de travailler à l'intérieur de l'application. Donc, en fait, tout d'abord, nous voulions écrire une fonction qui créera du code asynchrone. Et le moyen le plus simple de simuler dans code asynchrone javascript consiste à utiliser SetTimeout, car par exemple, où h et certaines données du backend et cela prend du temps. C'est pourquoi je veux créer ici une fonction sinc et ils l'appellent simplement un évier, un ventilateur. Et ici, nous voulons obtenir notre rappel en tant que paramètre. Et en fait, le rappel n' est qu'une fonction. Mais le plus important, c'est que la fonction asynchrone ne sait pas ce qu'est Kohlberg. Cela peut être n'importe quoi parce que nous l'appelons de l'extérieur. Maintenant, à l'intérieur, nous faisons du code asynchrone. Par exemple, nous récupérons des données à partir de l'API ou, dans notre cas, nous utilisons SetTimeout pour simuler cela. Et nous avons défini le délai d'attente, par exemple, pour deux secondes. Et puis, à la fin, réservez un pour appeler notre rappel. C'est ici que nous appelons simplement cette fonction ou parfois avec les données résultant de notre API. Peut-être que nous pouvons écrire Kohlberg terminé, et c'est notre fonction asynchrone qui est prête. Maintenant que nous utilisons cette fonction, nous venons d'essayer une fonction sinc et nous fournissons notre rappel à l'intérieur. Il s'agit d'une fonction qui sera exécutée à l'intérieur à la fin. C'est pourquoi nous pouvons dire ici que nous obtenons une fonction avec un message d' argument. C'est ce que nous récupérons de notre fonction asynchrone ici, nous pouvons écrire le journal de console Kohlberg et ici un message virgule. Nous allons vérifier si ça fonctionne. Je suis en train de recharger la page et comme vous pouvez le voir, nous n'avons plus rien maintenant après nous n'avons plus rien maintenant après deux secondes où Kohlberg est terminé. C'est exactement comme ça que fonctionnent les rappels. C'est exactement ce que nous avons mis en œuvre. Nous avons une fonction asynchrone qui exécute Kohlberg après avoir terminé sa tâche asynchrone. Et la deuxième question que vous pourriez avoir ici, quel problème de rappel résout ? En fait, il y a deux points importants. Tout d'abord, Kohlberg nous permet de faire du personnel synchrone et d'attendre le résultat. Parce qu'ici, nous fournissons simplement une fonction de l'extérieur et elle sera appelée plus tard et pas immédiatement. C'est le but principal du Kohlberg. Deuxièmement, il est important de se rappeler qu'à l'intérieur de notre fonction asynchrone, nous ne savons pas ce que Kohlberg, c'est pourquoi nous pouvons construire des choses partageables. Ce Colbert peut faire n'importe quoi dans différents cas. Par exemple, sur une page, réservez pour récupérer des données et peut-être rendre ces données. Et sur une autre page, nous voulions récupérer ces données et calculer le nombre total de publications ou quelque chose du genre. Ce qui signifie en fait que Kohlberg est une fonction générique. C'est pourquoi nous pouvons facilement partager notre fonction asynchrone sans implémentation spécifique de notre rappel. 32. Réseau parallèle Async: Voici un autre exemple de question synchrone, mais un peu plus avancée, comme vous pouvez le voir ici, nous avons une question. Exécutez la liste donnée de fonctions asynchrones en parallèle et retournez les résultats sous forme de tableau au rappel. Comme vous pouvez le voir ici, nous avons déjà trois fonctions, ce qui est donné avec la tâche. Ainsi, chaque fonction a ici à l'intérieur du rappel, qui renvoie 123 parties les plus importantes ici, cette première fonction est de trois secondes, puis de deux secondes, puis d'une seconde. Ensuite, nous devons écrire la fonction comme un lavabo parallèle. Nous sommes à l'intérieur de l'endroit où nous lançons un tableau de fonctions asynchrones, ce qui signifie que chaque fonction est un rappel. Et puis le deuxième paramètre que nous avons ici, ONE Kohlberg pour un évier parallèle. Ici, nous obtenons notre résultat et nous sommes connecté à la console ici. Et nous devons obtenir, dans ce cas, 123 car il doit imprimer des résultats ou des fissures, fonction synchrone dans l'ordre, ce qui signifie que nous exécutons trois fonctions en parallèle et que nous attendons pour qu'ils soient tous terminés. Et après cela, nous avons l'ordre correct des résultats, ce qui signifie que nous obtenons résultats de chaque fonction. En fait, nous utilisons beaucoup de mode parallèle, par exemple, beaucoup tous les jours parce que nous voulons, par exemple, récupérer trois requêtes différentes simultanément puis obtenir toutes les données au même endroit et les fusionner d'une manière ou d'une autre. C'est y. Construisons cette fonction maintenant, mais ce n'est pas facile et nous devons vraiment réfléchir à ce que nous faisons ici. Nous voulons mettre en œuvre une fonction parallèle d' évier. Et en fait, nous obtenons d'abord un tableau de nos fonctions asynchrones. Nous pouvons donc écrire ici depuis l'ufuncs. Et le deuxième paramètre est notre rappel. Et surtout, il s'agit d'un Kohlberg pour un puits parallèle, pas pour la fonction async Func spécifique. Tout d'abord, je veux créer ici un tableau où nous présenterons nos résultats. Ici. Je peux essayer de résultat tableau. Ici, nous voulons écrire un nouveau tableau et l'intérieur d'une longueur de point de fonction sinc. Dans ce cas, nous sommes préparés dans le tableau vide avec trois éléments. Et de toute évidence, il n'y en a que trois pour notre cas. Et il peut s'agir de n'importe quelle longueur de nos fonctions asynchrones. Après cela, je voulais créer un compteur de résultats, et par défaut, il sera 0 jusqu'à la longueur de notre tableau. Pourquoi avons-nous besoin de cela ? Parce qu'en fait, chaque fonction asynchrone peut être terminée en temps aléatoire et nous devons attendre que toutes ces fonctions soient terminées. Cela signifie que nous devons compter le nombre de fonctions déjà terminées jusqu'à ce que nous ayons une longueur riche. C'est ici que nous allons créer notre contenu de résultats. Et par défaut, il sera 0. Et maintenant, nous voulons parcourir nos fonctions asynchrones en boucle . Donc ici, je synchronise les polices point pour chacune, et elles utilisent vraiment for-loop ici. Et nous avons accès à chaque fonction asynchrone. Et nous aurons également besoin d'un index ici, car nous devons également stocker les résultats dans le même ordre. Maintenant, à l'intérieur de chacun, nous devons appeler notre fonction asynchrone. Plus important encore, nous ne savons pas du tout ce que cette fonction fait. Mais nous savons que cette fonction obtient un Kohlberg. C'est pourquoi nous pouvons écrire ici notre rappel. Nous appelons une fonction sinc sans argument. Et à l'intérieur, on nous fournit notre côlon. Si ce carnet de codes est déclenché, cela signifie que nous sommes prêts à utiliser notre fonction asynchrone. Et maintenant, nous voulons écrire le résultat dans notre tableau. C'est là que nous obtenons notre valeur de rappel. Et comme vous pouvez le constater ici à l'intérieur de chaque rappel, nous avons une valeur. Et c'est exactement la valeur que nous avons dans notre rappel ici. Nous voulons maintenant stocker cette valeur dans notre tableau de résultats. Ici, nous pouvons écrire un tableau de résultats et voici notre indice égal à valeur. Juste pour vous rappeler que nous avons notre indice ici. C'est pourquoi nous saurons que nous l'avons correctement stocké. Par exemple, il s'agit de la troisième fonction et elle sera déclenchée en premier, puis nous l'écrirons sur la tombe de l'index. Après cela, nous devons augmenter notre compteur de résultats pour savoir que l'une des fonctions est terminée. Enfin, nous voulons vérifier ici si cette fonction était la dernière. Ici, nous pouvons vérifier si notre compteur de résultats est plus grand ou égal à un évier ufuncs, alors nous voulons appeler notre Kohlberg pour un évier parallèle. Ici, nous pouvons simplement écrire un rappel et à l'intérieur, nous fournissons notre tableau de résultats. Encore une fois, ce que nous faisons ici, tout d'abord, nous avons préparé un tableau vide et notre compteur. Nous parcourons nos fonctions asynchrones en boucle et nous appelons toutes les fonctions ici toutes les fonctions ici fournies dans chaque fonction, un rappel. Lorsque nous obtenons du succès, nous stockons tout d'abord nos résultats dans l'indice de résultats, puis nous augmentons notre compteur. Dans ce cas, nous savons que cette logique va nous rendre Kohlberg pour un puits parallèle lorsque nous serons prêts et lorsque toutes nos fonctions seront terminées. Ici, nous appelons notre tableau de résultats de largeur de livre de codes. En fait, nous devons déplacer cette fonction avant d' appeler un puits parallèle, car nous devons l' écrire avec const. Et vérifions si ça fonctionne. Je suis en train de recharger la page et nous obtenons une affectation à une variable constante. Jetons un coup d'œil à ça. Oui, comme vous pouvez le constater, un compteur de résultats peut être augmenté car il est const. Ici. On peut écrire des LED et ça devrait fonctionner. Jetons un coup d'œil à ça. Je suis en train de recharger la page. Nous n'avons aucune erreur. Maintenant, trois secondes passent et nous obtenons notre tableau avec 123, ce qui signifie en fait qu'il y a un puits parallèle qui attend que chaque fonction asynchrone soit terminée, puis régénérer en Kohlberg notre résultat ici et maintenant nous pouvons utiliser notre tableau dans le bon ordre. Et c'est tout à fait correct si vous ne pouvez pas créer cette fonction rapidement. Plus important encore, si vous le faites dans un entretien, vous devez toujours dire notre Cloud, ce que vous faites et comment vous pensez. Parce que normalement une entrevue , ce n'est pas si important. Si vous résolvez complètement ou non cette tâche, vous devez montrer votre façon de penser et comment vous souhaitez résoudre cette tâche spécifique. 33. Convertir Callback en Promesse: Vous pourriez également recevoir une autre question concernant un JavaScript synchrone. Ici, nous devons créer la fonction de prémisse pour pouvoir utiliser la fonction de rappel via l'approche Promise. Et en fait, juste pour que vous sachiez que nous avions beaucoup de fonctions de rappel parce que nous n'avions pas de locaux. Après un certain temps en JavaScript, nous avons migré entièrement deux locaux, et maintenant ils sont pris en charge en JavaScript par défaut, ce qui signifie que nous n' utilisons plus autant de callbacks. Et comme vous pouvez le voir ici, nous avons une fonction de rappel standard où à l'intérieur nous faisons une hypothèse froide et nous avons maîtrisé cette fonction pour promettre une approche, qui en fait signifie, par exemple, que nous utilisons une ancienne bibliothèque basée sur les rappels, mais l'ensemble du code de notre projet utilise des locaux. C'est pourquoi il est très logique de faire un rappeur et d'utiliser cette fonction de rappel à travers la prémisse. Pour ce faire, nous devons créer un mince qui s'appelle la fonction Promises phi, qui signifie réellement la même fonction mais enveloppée et prometteuse. Nous pouvons le nommer de ma part, Sci-Fi, et c'est le nom typique et a libéré une fonction sinc, tout comme en haut. Ici, nous n'avons aucun argument à l'intérieur, nous voulons appeler notre fonction asynchrone. Et quand nous avons un carnet de codes , nous voulons appeler notre rappel depuis le lieu. C'est ici que nous sommes le maître retour et vous le promettez. Ici nous avons promis que nous avons résolu et rejeté, mais nous utiliserons ici sur Lou Resolve parce que nous n' avons aucune erreur ici. Maintenant, dans notre prémisse, nous pouvons simplement appeler la fonction asynchrone normale et mettre un rappel à l'intérieur. Et en fait, ce rappel nous donnera quelques données. C'est pourquoi j' écris des données et nous ne savons même pas de quelles données nous parlons. Maintenant, à l'intérieur, nous voulons simplement appeler la résolution et transmettre des données d'informations à partir de notre fonction asynchrone. Dans ce cas, lorsque la fonction synchrone sera terminée , notre Kohlberg se produira. Ici. Dans Kohlberg, nous obtenons des données à partir d'une fonction synchrone et le deux-points de Kohlberg résolvent cette prémisse que nous avons créée. Et surtout, cette fonction renverra une promesse. C'est pourquoi nous pouvons l'utiliser maintenant, comme cette prémisse de la fonction asynchrone élevée, nous appelons simplement les retours terminés comme prémisse. C'est pourquoi nous pouvons écrire ici. Ensuite, nous obtenons des résultats et nous pouvons, par exemple, le résultat du journal de console. Nous utilisons cette fonction comme promesse et nous avons encapsulé notre fonction sinc en prémisse si phi, allons vérifier cela. Je suis en train de recharger la page et comme vous pouvez le voir, nous en reviendrons une après un certain temps. Parce que nous avons ici un code de 3 000 millisecondes, ce qui signifie que nous obtenons nos données après trois secondes et que ce code fonctionne. Et maintenant, partout dans notre application, nous pouvons utiliser cette fonction de rappel dans Promise Approach. 34. Carte des données dans les promesses: Il se peut que vous obteniez une autre tâche typique de mappage des données avec des locaux. Comme vous pouvez le voir ici, nous avons une telle fonctionnalité. Vous disposez de deux fonctions qui renvoient des locaux, des métadonnées provenant des utilisateurs et des statuts des utilisateurs pour obtenir un tableau d'utilisateurs avec un nom AED et qui est actif. Comme vous pouvez le voir ici, nous avons un utilisateur de tableau avec un D et un nom, et nous avons un étage d'utilisateur secondaire avec les propriétés dN dt is active. Et en fait, cette AD est exactement la même que celle d'un D ici. Et ce sont exactement les données que nous devons cartographier. Nous devons donc obtenir un tableau avec un nom DNS et est actif. Mais l'essentiel est que ces données ne sont pas disponibles rapidement. Ils sont uniquement disponibles ici dans get users and get users status. Nous avons deux fonctions prometteuses, et vous allez généralement récupérer ces données à partir de l'API. C'est ainsi que les utilisateurs obtiennent de fausses promesses. C'est pourquoi nous résolvons un ensemble d'utilisateurs ici et ici sont identiques avec les statuts des utilisateurs, ce qui signifie en fait que nous avons deux locaux. Nous devons les résoudre et les combiner. Il existe différentes façons de résoudre cette tâche. L' approche la plus débutante ici consiste à chercher la première prémisse, puis la suivante. Essayons ça. Maintenant. Nous pouvons écrire ici obtenir les utilisateurs, et cela nous redonne une prémisse. C'est ici que nous pouvons écrire alors et que nous récupérons nos utilisateurs. Après cela, nous voulons récupérer nos statuts GetUser. Ici, nous appelons les statuts GetUser, et nous les utilisons également ici, et nous récupérons nos statuts d'utilisateur. Et maintenant, dans cette fonction, nous avons accès aux statuts des utilisateurs et aux utilisateurs. Parce que nous n'obtiendrons ici qu'après les avoir résolus tous les deux, mais pas en parallèle, mais un par un. Ce que nous pouvons faire ici, nous pouvons cartographier les utilisateurs, sorte que nous puissions créer, par exemple, des utilisateurs mappés. Et nous devons parcourir nos utilisateurs en boucle avec la carte, nous avons accès à chaque utilisateur. Et maintenant, nous devons trouver cette propriété active car c'est exactement ce que nous voulons mettre dans notre tableau. C'est pourquoi ici nous pouvons écrire const est actif, et ici nous voulons trouver les statuts des utilisateurs, notre statut, c'est ici que nous avons raison et trouver le statut des utilisateurs. Et ici, nous devons vérifier le statut de l'utilisateur. L'ID de point est égal à notre ID de point utilisateur. Mais cela reviendra plus rapidement au statut et nous devons l'essayer à la fin est actif. Dans ce cas, nous arriverons sur la propriété spécifique. Maintenant, après avoir obtenu notre exécutif, nous voulons le mettre à l'intérieur de chaque objet, mais nous n'utiliserons pas ici la poussée parce que vous vous souvenez des poussées mauvaises. C'est pourquoi Google revient plus simplement ici et que vous vous y opposez et nous sommes dispersés ici. Tous les domaines de notre utilisateur. Le verre est une propriété active. Dans ce cas, nous sommes Poutine est la propriété active de chaque utilisateur. Et après cela, nous pouvons simplement consoler le journal de nos utilisateurs mappés ici et ils sont disponibles pour nous dans notre application. Jetons un coup d'œil à ça. Je suis en train de recharger la page et nous sommes rencontrés utilisateur. Et comme vous pouvez le voir, il s'agit d'un tableau avec trois objets, ID, nom et actif, ce qui signifie que nous résolvons cette tâche avec succès. Mais il y a beaucoup de problèmes dans ce code. Tout d'abord, nous avons deux prémisses différentes et elles ne dépendent pas l'une de l'autre, ce qui signifie qu'il n'a aucun sens d'attendre première prémisse et Don fera ensuite une deuxième prémisse. Nous devons réellement les faire en parallèle. Dans d'autres cas, c'est trop lent. Je veux donc écrire ici qu'il s'agit de la première solution et ils veulent commenter notre première solution. Essayons maintenant la deuxième solution. Pour la deuxième solution, nous pouvons utiliser des prémisses si vous ne savez pas quelle est sa prémisse. C'est donc exactement ce qui nous aide à réaliser plusieurs locaux en parallèle. Nous pouvons écrire ici la promesse point o, et nous devons passer un éventail de locaux à l'intérieur. Ici, nous avons un tableau et nous pouvons écrire ici, obtenir des utilisateurs, puis des virgules, obtenir les statuts des utilisateurs. Dans ce cas, nous jetons à l'intérieur des locaux tous les tableaux avec nos deux locaux. Et après toute prémisse à la fin, nous pouvons simplement l'essayer, puis ici nous obtiendrons notre résultat sous forme de tableau, mais il n'est pas très confortable de travailler avec array ici. C'est pourquoi nous pouvons directement détruire ici notre réseau de propriétés. Ici, nous obtenons nos utilisateurs et nous obtenons ici nos statuts d'utilisateur. Et après cela, nous pouvons faire notre logique, ce que nous avons fait ici avec un utilisateur mappé. C'est pourquoi je vais couper ce code a été mappé des utilisateurs et mettre à l'intérieur parce qu'il restera exactement le même. Ici, nous avons accès à nos utilisateurs et à l'état de nos utilisateurs SES, et nous les cartographions et la consoles le consigne ici. Jetons un coup d'œil à ça. Je suis en train de recharger la page et nous recevons exactement la même réponse. Le point principal est ici que nous avons utilisé la promesse tous. C'est beaucoup mieux car dans ce cas nous faisons ces deux demandes en parallèle. De plus, comme vous pouvez le voir, la solution à, mais n'avez pas cette mauvaise mauvaise chose d'alors et là, et ici nous n'en avons qu'un seul alors c'est évidemment mieux parce que nous voulons éviter ce code profondément imbriqué, mais nous pouvons améliorer ce code. Comme vous pouvez le voir, nous avons cette carte pour les utilisateurs et nous pouvons déplacer ce code en dehors de notre Then pour le rendre plus lisible. Ici, nous pouvons créer une fonction supplémentaire avant, par exemple, les utilisateurs de cartes. Et nous savons que nous obtenons ici nos statuts d'utilisateurs et d'utilisateurs. Et en fait, c'est une fonction complètement pure qui va simplement cartographier nos utilisateurs. Je peux donc couper ce code et le mettre ici à l'intérieur. Ici, nous n'avons pas besoin de notre constante. Nous pouvons retourner directement notre carte. Et en fait, ce code sera exactement le même que nous l'avons utilisé précédemment. Et maintenant, ce que nous pouvons faire ici, nous pouvons simplement créer des utilisateurs mappés. Et ici, nous signons les utilisateurs de la carte et nous passons à l'intérieur de nos statuts d'utilisateurs et d'utilisateurs. Comme vous pouvez le voir maintenant, ce code est encore mieux lu car ici nous avons tout simplement prémisse tout. Ensuite, nous cartographions nos utilisateurs avec fonction supplémentaire et travaillons dessus pour les Logan. Voyons cela comme vous pouvez le voir ici, exactement la même réponse. Et en fait, nous pouvons améliorer cette fonction encore un peu plus, comme vous pouvez le voir, où je cartographie les utilisateurs avec eux. Mais en fait, nous pouvons enchaîner notre danse, ce qui signifie que nous voulons peut-être renvoyer directement notre carte aux utilisateurs. Donc notre premier, alors nous allons rencontrer les utilisateurs et les renvoyer ici. Et après ce week-end, juste Un de plus, et ici nous aurons nos utilisateurs cartographiés, et ici nous voulons travailler avec eux. Donc, ici, je vais consoler le journal de nos utilisateurs mappés. Dans ce cas, nous avons divisé deux cartes de danse différentes des utilisateurs et travaillons avec succès. Et en fait, avec une console plus simple, consignez nos utilisateurs, ce qui signifie que c'est notre succès. Et nous pouvons même supprimer le retour ici et l'écrire en une seule ligne, dans ce cas, il sera encore plus lisible. Je dirais que ce code est aussi sec que possible. C'est pourquoi si vous voulez montrer que vous êtes un développeur avancé, vous devez écrire votre code et essayer améliorer autant de fois que possible. 35. Réécrire les données de cartographie dans Async Await: La prochaine question asynchrone en JavaScript sera sûre qu' un puits d'aide ici maîtrisera l'exercice précédent, comme cartographier les utilisateurs avec deux locaux dans un évier, une fonction de poids, comme vous pouvez le voir ici, nous avons statuts d'utilisateurs et deux fonctions de nos utilisateurs, obtenir des utilisateurs et d'obtenir des locaux. Et en fait, je doute de notre code précédent pour que nous puissions en copier des parties. La première chose que nous devons faire ici est de créer une fonction supplémentaire. Pourquoi est-ce que c'est ? Parce que vous ne l' autorisez pas à écrire de manière plus simple directement dans la partie racine du fichier**** JavaScript. C'est ici. Tout d'abord, nous devons créer quelque chose comme obtenir des utilisateurs mappés, peut-être parce que nous voulons en faire une fonction asynchrone. C'est ici que nous utilisons notre mot clé asynchrone. Ici, nous créons notre fonction. Et ce mot-clé supposé nous permet d'utiliser un poids à l'intérieur. Mais nous voulons faire maintenant que nous voulons obtenir les statuts d'utilisateurs finaux de nos utilisateurs. Ici, je peux simplement écrire aux utilisateurs. N'oubliez pas ce poids ici. Nous essayons juste d'obtenir des utilisateurs. Et si vous oubliez ici un poids, obtiendrons pas nos utilisateurs ici, mais vous obtiendrez ici une prémisse. Et ce n'est pas ce que nous voulons. Nous voulons résoudre notre prémisse. La prochaine ligne ici sera le statut de l'utilisateur, et ici nous voulons obtenir notre utilisation des statuts. Et évidemment, comme vous pouvez le constater, ce code est beaucoup, beaucoup plus facile à lire car nous n'en avons pas , alors nous n' avons pas tous de prémisses. On dirait qu'il s'agit d'un simple code synchrone car les lignes sont exécutées une par une. Et après cela, nous voulons en fait copier, coller notre mappage et le mettre ici car nous ne le changerons pas et il n' aucun sens de créer une fonction supplémentaire. Parce qu'à l'intérieur de cette fonction, nous n'avons que deux lignes. C'est pourquoi nous pouvons écrire ici des utilisateurs mappés const. Ici, nous affectons la carte des points des utilisateurs et nous réalisons exactement les mêmes choses que dans la vidéo précédente. Après la troisième ligne, nous avons déjà nos données cartographiques. Ici, nous pouvons écrire une carte de journal de console pour les utilisateurs. Et ici, nous pouvons vérifier nos utilisateurs mappés, mais nous devons également appeler quelque part notre fonction obtenir des utilisateurs mappés. Nous n'avons pas besoin d'écrire ici un poids ou quelque chose parce que nous appelons simplement une fonction asynchrone. Maintenant, je vais recharger cette page. Comme vous pouvez le constater, nous recevons des utilisateurs mappés. Et c'est notre réponse, qui signifie que ce code fonctionne correctement. Et ce code semble super lisible car nous avons utilisé ici un seul poids par ce n'est pas suffisant, mais nous voulons toujours envelopper notre code octet d'un try-catch. Pourquoi est-ce que c'est ? Parce que si nous obtenons une erreur ici, nous ne le verrons jamais. Nous aurons une erreur et une prémisse capturée. C'est pourquoi nous voulons au début de l'écriture essayer ici à la fin après notre coupon de journal de console pour le fermer et le sécher ici, en cage et ici, nous obtenons notre erreur à l'intérieur de notre argent. Nous voulons écrire quelque chose comme le journal de console Azure. Et voici une erreur que nous pouvons obtenir. Dans ce cas, nous sommes sûrs et nous saurons si un code asynchrone ne fonctionne pas ici ou si nous obtenons des erreurs, nous lancerons une erreur ici à l'intérieur de catch. Jetons un coup d'œil à ça. Notre code fonctionne toujours et nous utilisons avec succès le poids singulier à droite sont des promesses avec lui. 36. Vous Devez Utiliser Un Vocabulaire Correct: Une autre chose importante à retenir est assez délicate et les gens n'en parlent pas beaucoup. Et je parle ici de votre vocabulaire de programmation. Ce que j'entends par là, en fait, il y a beaucoup de mots que vous pouvez utiliser lorsque vous parlez de programmation. Donc, la personne vous comprend mieux ou du moins correctement, et vous ne devez pas les mélanger. Il y a un début. Cela peut être très difficile pour vous parce que vous ne connaissez pas tous ces termes ou vous n'êtes pas vraiment sûr de ce que vous voulez dire, mais vous devez le garder à l'esprit et essayer de vous améliorer avec le temps. Par exemple, vous devez vraiment comprendre ce que vous dites. Par exemple, j'ai montré une fonction ou j'ai créé une méthode à l'intérieur de ma classe. Il s'agit d'une instance de la classe. Vous devez utiliser tous ces termes correctement si vous voyez une fonction, mais que vous appelez cette méthode, ou peut-être que vous l'appelez autre chose. Ce n'est pas exact. Ensuite, vous recevrez beaucoup de questions supplémentaires ou vous serez considéré comme un mauvais développeur. Bien sûr, ce n'est pas ce que vous voulez. C'est pourquoi vous devez réfléchir un peu aux mots que vous utilisez et essayer de les utiliser correctement lorsque vous décrivez des éléments de programmation. 37. Gestionnaire de demandes de conception: Voici une autre tâche synchrone, un peu complexe. Vous avez donc besoin de temps pour le résoudre. Et on ne peut pas vraiment le résoudre en trois ou cinq minutes. Comme vous pouvez le voir ici, nous devons concevoir un utilitaire qui prend une URL et la valeur des tentatives, qui tentera de faire une demande de récupération. En cas d'échec , cette fonction essaiera à nouveau d'extraire certaines données avec un retard croissant pendant nombre de fois que l'utilisateur a demandé. Ce qui signifie en fait que nous devons créer une fonction qui va récupérer une URL spécifique que nous fournirons et qui aura également un certain nombre de tentatives. Et nous voulons actualiser ces données encore et encore plusieurs fois si nous n'avons pas reçu de message de succès. Et en fait, c'est un problème très courant car parfois notre API ne fonctionne pas ou les données ne sont pas là et nous voulons réessayer. Essayons de créer cette fonction et ils veulent la nommer, par exemple gestionnaire de requêtes. Et en fait, nous obtiendrons notre URL parce que nous voulons récupérer quelque chose de l'extérieur et chaque fois quelque chose de nouveau. Et ici, nous avons quelques options pour notre URL. Et le dernier paramètre sera des tentatives. Par défaut, il peut s' agir de trois, par exemple. Nous essayons donc de rafraîchir certains membres du personnel trois fois. C'est ainsi que nous allons utiliser cela. Nous avons donc ici le gestionnaire de requêtes et nous avons fourni une URL. Ils utiliseront ici une URL qui n'existe pas. Dans ce cas, nous allons le rafraîchir. Nous avons foo.com et cette fonction doit revenir plus rapidement, c'est là que nous avons ici, puis nous avons le succès et l'erreur. C'est ici que nous attendons une réponse et nous pouvons simplement essayer le journal de la console, par exemple, la réponse pour vérifier si elle fonctionne. C'est ainsi que nous utiliserons généralement cette fonction. Nous voulons récupérer des URL et nous les avons simplement. Et évidemment, ici, nous pouvons passer quelques options. Par exemple, la méthode post et quelqu'un, ou le nombre de tentatives si nous voulions le modifier, si nous n'avons rien passé, alors ici nous n' avons pas d'options et notre tentative est trois. Maintenant, la question est de savoir ce que nous voulons revenir ici ? Le point le plus important pour comprendre comment nous allons le construire. Nous allons exécuter cette fonction de manière récursive car c'est un moyen le plus simple d'appeler cette fonction plusieurs fois, c'est-à-dire que nous appellerons à nouveau le gestionnaire de requêtes en cage ici. Et nous allons simplement fournir ici des options d' URL internes , puis des tentatives, nous diminuerons, ce qui signifie qu'au début, nous avons trois tentatives. La prochaine fois, il y en aura deux, puis un, puis nous lancerons une erreur car nous n'avons pas encore de tentatives. Tout d'abord, nous devons rendre une promesse parce que c'est ce que nous attendons dehors. Et c'est là que nous revenons ici, vous le promettez, et ici nous avons notre détermination et notre rejet. Maintenant, dans cette fonction, nous voulons essayer de récupérer nos données, et nous utiliserons simplement ici la fonction de récupération car elle est disponible en natif pour nous. À l'intérieur, nous passons tout d' abord notre URL et deuxièmement les options. Et maintenant, nous avons notre, puis nous avons des prises et, en fait , nous pouvons simplement appeler notre résolution. Cela transmettra les données de succès directement à l'intérieur de la résolution, car Resolve est une fonction. Ici. Nous voulons également une prise. Ici, à l'intérieur de la cage. Nous voulons faire notre matrice. Nous obtenons donc notre erreur et nous voulons appeler à nouveau notre gestionnaire de requêtes. Mais ici, nous devons savoir quand je vais essayer le dernier. Donc ici, je veux créer une propriété est la dernière tentative. Et ici, nous pouvons simplement vérifier si notre tentative est égale à une. Dans ce cas, nous saurons, d'accord, c'est la dernière fois que nous pouvons appeler notre gestion des demandes. Et après cela, nous vérifions s'il s'agit d'une dernière tentative, puis nous voulons renvoyer une flèche de rejet, ce qui signifie que nous rejetons notre prémisse parce que nous ne pouvons plus continuer après cet égaliseur, mais n'ont pas 0 dernière tentative, alors nous voulons faire SetTimeout car en fait nous voulons appeler cette fonction après un certain temps. Il n'a aucun sens de l'appeler directement après, car peut-être que l'API est toujours en panne. Ici. Je vais écrire SetTimeout, par exemple, avec trois secondes. De toute évidence, nous pouvons également implémenter un argument pour passer l'intervalle entre les données d'appel. Dans SetTimeout, nous voulons demander à nouveau nos données. Donc ici, nous appellerons le gestionnaire de requêtes et nous passons ici les options URL maintenant. Et la dernière sera des tentatives moins une, ce qui signifie que nous ne commençons nulle part. Nous fournissons simplement manière récursive dans le gestionnaire de requêtes une réduction du nombre de tentatives. C'est y ici la première fois qu'il est trois, puis on arrive ici dans SetTimeout. C'est à un seul. Ensuite, nous vérifions que cette tentative est égale à une et nous sommes ici à l'intérieur de cette IV et nous la rejetons. Alors, vérifions si ça fonctionne. Je suis en train de recharger le navigateur. Et comme vous pouvez le voir, nous obtenons une flèche car cette URL n'existe pas et nous obtenons des tentatives n' est pas définie à la ligne 13 dans notre délai d'attente défini. Et en fait, le nom de l'argument ici n' est pas correct. Ce n'est pas une tentative, mais tentatives car nous en avons plusieurs. Et ici aussi, il devrait y avoir tentatives égales à une et non une tentative. Rechardons-le. Comme vous pouvez le voir, nous recevons un en-tête. Ensuite, au bout de trois secondes, nous recevons cette demande de nouveau car nous l'essayons encore et encore. Ici, nous avons échoué à récupérer une erreur non capturée, ce qui signifie ici que nous devons écrire non seulement eux, mais aussi en cache, car ici nous obtiendrons une erreur si nous ne pouvons pas récupérer les données. Et ici, nous pouvons simplement essayer l'erreur de journal de la console. Et ici, nous voulons voir notre erreur. Mais comme vous pouvez le voir, nous obtenons toujours une erreur de type unquote paire d'échec, ce qui signifie que notre code n' est pas correct à 100%. Et en fait, le problème est que c' est notre premier appel de gestionnaire de demandes et que nous gérons à l'extérieur avec alors et attrapons. Mais ici, à la place SetTimeout, nous avons un gestionnaire de requêtes, mais nous ne l'avons pas fait et attrapons que c'est pourquoi il se brise. Nous avons une erreur dans notre troisième charbon, et c'est ici, mais nous n'avons pas précisé ce qu'il adviendra. C'est ce que doit écrire ici, boum. Ensuite, nous voulons le résoudre avec des données et aussi des captures et en espèces que nous voulons simplement rejeter. Dans ce cas, il fonctionnera correctement. Essayons ça. Je suis en train de recharger la page. Nous sommes en train de surmonter les erreurs et maintenant notre erreur est bouillonnée à l'extérieur et TypeError n'a pas réussi à récupérer. Dans ce cas, il fonctionne correctement. Vous ne devriez pas oublier de faire bouillonner notre gestionnaire de demandes internes à l'extérieur avec alors et d'attraper. Je peux donc dire que cette fonction est assez compliquée. Donc, si vous recevez quelque chose comme ça lors de l'entretien, vous devez vraiment prendre le temps de le résoudre correctement. Vous ne pouvez pas vraiment concevoir une telle fonction en quelques minutes. 38. Mettre en œuvre une comparaison peu profonde: Vous pouvez également recevoir une question concernant l'égalité ou la comparaison dans JavaScript. Et comme vous pouvez le voir ici, nous avons une question, la fonction de comparaison superficielle des concepteurs. Pour cela, vous devez connaître la différence entre la comparaison JavaScript, qui est une comparaison native, superficielle et une comparaison profonde. Dans JavaScript, nous pouvons simplement en écrire un égal à deux. Nous sommes fausses. L'un est égal à un, c'est vrai. Cela fonctionne parce que nous comparons les primitives. Mais si nous comparons ici un objet égal un et qu'il y a un objet qu'un est égal à un, nous deviendrons faux. Alors que c'est parce que nous ne pouvons pas comparer des objets comme celui-ci en JavaScript car ils référencent différents objets dans la mémoire. Et vous avez exactement le même problème avec array. Le tableau vide n'est pas égal à un tableau vide. Oui, nous pouvons comprendre pourquoi cela fonctionne comme ça, mais cela n'est pas confortable car normalement les développeurs veulent comparer les tableaux et les objets par valeurs et non pas comme la référence à l' objet dans la mémoire. C'est pourquoi nous avons des fonctions de comparaison superficielles et de comparaison profondes. L'idée est donc que comparaison superficielle est plus rapide que la comparaison approfondie, mais elle corrigera les problèmes liés la comparaison d'objets ou de tableaux. Il ne corrigera que les tableaux imbriqués ne sont pas des objets, ce qui signifie en fait si nous le faisons avec une comparaison superficielle, comparer a, et ici nous avons un objet avec B1 et ici B1, nous obtiendrons toujours une mauvaise réponse même avec une fonction de comparaison superficielle. C'est tout à fait normal car dans ce cas, nous voulons comparer chaque valeur imbriquée, puis nous devons utiliser une comparaison approfondie. Et la comparaison approfondie est extrêmement lente car nous vérifions chaque valeur, mais je vais certainement vous donner une vraie réponse. Dans cette vidéo, nous devons écrire une fonction de comparaison superficielle, ce qui signifie que nous voulons corriger la comparaison des tableaux et des objets, mais nous ne devons pas comparer les tableaux et les objets imbriqués. C'est ainsi que la comparaison superficielle fonctionne. Et en fait, j'ai ici un type de fonction supplémentaire qui nous aidera énormément à construire une comparaison superficielle. Et comme vous pouvez le voir dans le navigateur, nous pouvons simplement utiliser typeof sur différents types de données. Par exemple, pour le nombre, nous obtenons un nombre tendu pour mot chaîne plutôt que d' obtenir une chaîne. Et ici, nous pouvons écrire un objet et ensuite nous obtenons un objet, ce qui signifie qu'il est vraiment agréable d' obtenir le type de notre variable sous forme de chaîne. Pour nous, la partie la plus intéressante est ce prototype d'objet pour diffuser des entrées d'appel. Et comme vous pouvez le voir dans l'entrée où, par exemple , un et nous obtenons le numéro d'objet. Et en fait, cette expression régulière ici va simplement déplacer l'objet et nous obtiendrons cette partie avec numéro. C'est ainsi que fonctionne cette fonction. Ici, je veux créer notre fonction de comparaison superficielle. Nous devons présenter ici deux arguments. Nous avons donc source et cible, et ce sont deux choses que nous voulions comparer, par exemple deux variables. Tout d'abord, nous voulons comparer un type de données car si nous avons un type de données différent, nous ne devrions rien faire et cela signifie qu' ils ne sont pas égaux. C'est pourquoi nous pouvons écrire ici. Si typeof source n' est pas égal à typeof, alors ici nous pouvons simplement renvoyer false. C'est pourquoi il s'agit d'une super performance. Nous ne comparons rien. Nous obtenons simplement un type de comparaison et nous sommes sortis après ce boom doit écrire une logique pour nos primitives. Et ici, nous pouvons simplement utiliser une comparaison JavaScript native simple. J'écris ici si la source est égale à trois feuilles de style égales, alors nous revenons juste, qui signifie en fait cette seule ligne. Nous allons comparer nos primitives. Et maintenant, nous avons juste besoin de créer des caisses pour nos objets et tableaux. Tout d'abord, couvrons nos tableaux. Ici, nous voulons cocher le type de notre tableau source égal. Nous voulons ensuite appliquer cette logique. Et vous pourriez demander, d'accord, mais pourquoi nous ne faisons que vérifier la source et non pas un détergent ? Parce qu'en fait, ici en haut, nous savons déjà que la source et la cible sont du même type. Dans d'autres cas, nous sommes déjà hors fonction. Ici. Nous savons que la source et la cible sont toutes deux des baies et nous voulons maintenant les comparer, mais en fait, nous pouvons améliorer les performances. Ici, on ne peut comparer qu' une longueur de deux tableaux. Et s'ils sont différents , nous ne devrions rien comparer parce qu' ils ne sont pas égaux. Donc ici, je peux écrire IV, la source, terre n'est pas égale à notre longueur cible. Ensuite, nous sommes ici, il suffit de retourner faux. Nous voulons maintenant comparer ces deux tableaux, et la façon la plus simple de le faire est d'utiliser la moyenne. Nous vérifions chaque élément d'un tableau et nous le comparons. Ici, je veux écrire chaque source de retour, donc nous vérifions chaque élément de la source. Et ici, nous avons accès à l'élément et à l'index. Et ce que nous pouvons faire ici, c'est notre élément est égal à l'indice cible. Dans ce cas, nous comparons chaque élément de notre source à chaque élément de la cible. Mais comme vous pouvez le voir ici, nous utilisons une comparaison JavaScript native, ce qui signifie qu'elle fonctionnera pour les primitives, mais elle ne fonctionnera pas, par exemple, pour les objets ou les tableaux, à quoi ressemble-t-elle ? Rechargeons la page et ici notre fonction, comparaison superficielle. Et nous pouvons maintenant fournir un tableau de primitives. Donc, nous en avons 11 et nous devenons vrais, ce qui signifie que notre fonction fonctionne correctement car le JavaScript natif vous ne pouvez pas comparer 11, il sera faux et notre fonction fonctionne correctement. Nous devons maintenant essayer le code similaire pour notre objet. C'est pourquoi nous pouvons écrire ici si typeof source est égal à objet, alors nous voulons appliquer notre logique. Et encore une fois, je veux améliorer les performances. C'est ici. Tout d'abord, nous pouvons vérifier, par exemple, clés d'objet et comparer la longueur des clés si la longueur est différente de celle de ces objets sont certainement différents. Ici, nous pouvons écrire des touches de points d'objet. Ici, nous avons la source et nous comparons la longueur. Donc ici, la longueur n'est pas égale à nos touches de points d'objet, et ici nous avons notre longueur de point cible. Dans ce cas, nous pouvons simplement retourner faux et nous ne devrions pas faire de comparaison. Et en fait, il faudrait maintenant comparer les objets. Donc, pour cela, j'utiliserai également tous. Je veux donc renvoyer nos clés de points d'objet, et je reçois un tableau de chaînes de clés de notre objet. Et ici, nous fournissons notre source. Après cela, nous pouvons utiliser chaque élément ici. Nous obtenons notre clé. Nous pouvons maintenant comparer la clé source. Nous obtenons donc la valeur et nous comparons ici la clé cible. Dans ce cas, nous comparons chaque valeur de notre objet. Mais comme vous pouvez le constater avec une comparaison JavaScript simple, ce qui signifie qu'il fonctionnera pour les primitives, mais cela ne fonctionnera pas pour les éléments imbriqués profonds. Jetons un coup d'œil à ça. Je vais recharger la page. Voici notre comparaison superficielle. Dans ce cas, nous voulons comparer l'objet a et l'objet que vous souhaitez. Et comme vous pouvez le voir ici, j'ai une faute de frappe. Il n'y a pas ici de source. Allons changer cela. Maintenant, comme vous pouvez le constater, cela fonctionne et nous pouvons comparer nos objets. Et en fait, je veux une comparaison supplémentaire pour les dates, et c'est extrêmement facile à faire. Ici. Nous pouvons essayer le type de source égal à l'état. Ensuite, nous voulons comparer seulement deux chiffres, car nous pouvons comparer chaque date deux millisecondes et comparer les nombres est extrêmement efficace. C'est pourquoi ici nous pouvons écrire retour source dot get time. Cela obtiendra des millisecondes égale au temps d'obtention du point cible. Et dans ce cas, nous comparons simplement deux chiffres et c' est tout à fait très bien. C'est ainsi que nous construisons une fonction de comparaison superficielle. Et en fait, c'est comme ça que je veux voir comparaison par défaut en JavaScript, mais malheureusement nous ne l'avons pas. C'est pourquoi nous devons construire cette fonction par nous-mêmes ou l'utiliser à partir d'une bibliothèque comme Rumba la dash ou simplement le paquet NPM. Si vous répondez à de telles questions sur la comparaison superficielle, vous devez dire qu'il s'agit super performances par rapport à une comparaison approfondie, mais il ne peut pas comparer les éléments imbriqués, qui C'est tout à fait très bien. Et il vous suffit de savoir dans quel cas vous l'utilisez. 39. Mettre en œuvre une comparaison approfondie: Dans la vidéo précédente, nous avons écrit la comparaison superficielle de la fonction. Mais vous pouvez aussi avoir une question, d'accord ? Mais comment écrire la fonction pour une comparaison approfondie ? C'est ce que nous voulons faire dans cette vidéo. En fait, comme vous pouvez le voir, je n'ai supprimé aucun code. J'ai ici un type de comparaison superficielle et ils veulent copier-coller complètement et comparer plus tard avec une comparaison approfondie. C'est pourquoi, comme vous pouvez le voir, j'ai copié l'ensemble de la fonction et ils veulent simplement la renommer pour une comparaison approfondie. Et en fait, le code sera similaire à 90% car tout d' abord, nous voulons vérifier le type de données et il reste le même et qu'à la fin, nous comparerons la date et la source et cible pour les primitifs de la même manière. Donc, en fait, la biomasse change simplement la comparaison de nos tableaux et objets et même le code à l'intérieur sera presque le même. Tout d'abord, pour la course, nous vérifions la longueur. Ici, nous en avons tous, mais ici, nous devons supprimer notre comparaison des éléments car il s'agit d'une comparaison native. Mais ici, nous voulons vérifier de manière récursive chaque élément. C'est pourquoi, ici, nous pouvons simplement écrire une comparaison profonde et nous jetons à l'intérieur de notre indice de cible de coma d'éléments. Dans ce cas, ce que nous faisons, nous sommes à nouveau comparés en profondeur du côlon. Et en fait, il se peut que nous ayons un objet, puis nous venons récursivement et nous disons une comparaison profonde. Et nous allons comparer le sujet et nous le refaisons encore et encore jusqu'à ce que nous comparions l'objet entier ou l'ensemble du tableau. Et peu importe la profondeur du sujet ou la profondeur de ces tableaux, ce qui signifie qu'il ne s'agit pas de performances. C'est vraiment lent, mais cela vous donnera la bonne réponse lorsque vous travaillez avec données imbriquées et exactement la même chose que nous devons faire maintenant avec nos objets. Ici, nous pouvons laisser notre comparaison avec les clés. C'est tout à fait très bien. Ici, nous avons notre Every, mais nous devons supprimer cette comparaison et appeler Deep Compare à la place. Et nous passons à l'intérieur de notre clé source et ici la clé cible. Dans ce cas, nous comparons deux valeurs de notre cible et de notre source. Et nous le faisons également avec une comparaison approfondie. Et c'est en fait que cela va complètement transformer notre fonction de comparaison superficielle en comparaison profonde. Voyons cela maintenant, je vais recharger la page ici, la comparaison superficielle A1, A1, c'est vrai, mais en fait ici à l'intérieur de la comparaison superficielle, si je vais lancer un B1, donc nous avons un objet imbriqué et ici un B1, il retournera false, ce qui signifie en fait que la comparaison superficielle ne peut pas fonctionner avec des données imbriquées. Mais ici, nous appelons notre comparaison profonde et nous devenons réalité parce que la comparaison par dip est récursive et elle va comparer n in estan correctement dans exactement la même chose que celle que nous avons pour une course. Par exemple, si nous avons ici un tableau de tableaux, disons tableau avec tableau 1. Et ici, nous avons un tableau et un tableau à l'intérieur. Comme vous pouvez le constater, nous sommes en train de passer et nous pouvons comparer des tableaux de n'importe quel niveau. 40. Créer une fonction de Memoization: Vous pourriez également avoir une question sur la mémorisation. Ici, comme vous pouvez voir où masque conçoit une fonction de mémorisation qui en ajoute dix pour fournir de la valeur et la retirer du cache si tout était calculé. Si vous ne savez pas ce que signifie la mémorisation du terme en JavaScript, cela signifie que nous mettons en cache les valeurs pour éviter de refaire la même opération, ce qui signifie, par exemple, que nous voulons soustrayez deux chiffres. Et si nous l'avons déjà fait et que nous connaissons déjà la réponse, nous devons simplement renvoyer le capteur et ne pas le calculer à nouveau. De toute évidence, il n'est pas logique de le faire soustraire ou certains, mais cela a beaucoup de sens lorsque nous avons des calculs difficiles. C'est pourquoi nous devons construire ici un exemple de fonction de mémoisation. Et en fait, ce n'est pas si difficile. Donc ici, je veux créer une fonction mémoriser, ajouter. Au lieu de cela, cette fonction. Nous n'avons pas besoin d'arguments, mais nous voulons créer un cache à l'intérieur. C'est pourquoi je vais créer ici des biens en espèces. Ce n'est qu'un objet. Maintenant, je veux retourner une nouvelle fonction. Et vous pouvez voir qu'il s'agit d'une fermeture, car en fait nous pouvons stocker certaines variables lorsque nous avons une fermeture. C'est pourquoi je retournerai ici la fonction avec valeur. Voici comment nous l'utilisons à l'extérieur. Ici, nous voulons créer une nouvelle fonction d'ajout et nous l'appelons simplement MiS ajouter, dans ce cas, une nouvelle fonction utilisateur AD et nous pouvons l'utiliser. C'est pourquoi nous pouvons écrire ici une nouvelle publicité, par exemple neuf, et c'est notre valeur. Et dans ce cas, la sortie 19 sera calculée par 19 car en fait, comme vous pouvez le voir à l'avenir, elle doit en ajouter dix à notre valeur fournie. Nous jetons à l'intérieur de neuf et nous en récupérons 19. Mais en fait, lorsque nous appelons nouvelle annonce avec Snyder, encore une fois, la sortie sera également 19, mais elle doit être extraite du cache. Il ne doit pas être calculé. Encore une fois, c'est exactement ce que fait la mémorisation. Il nous suffit maintenant de mettre en œuvre cette logique de mémoisation. Nous pouvons donc écrire ici si nous avons une valeur en espèces, donc nous vérifions si nous avons telle validité à l'intérieur de notre objet, alors nous voulons simplement le retourner. Et ici, je veux écrire le journal de la console que vous puissiez voir qu' il est minimisé. Ici, on va chercher de l'argent. Et après cela, je veux écrire de l'argent de retour. Et voici notre valeur. Comme vous pouvez le constater, nous ne faisons aucun calcul ici. Nous retournons simplement de la valeur et nous en aurons également d'autres. Et ici, nous avons des calculs qui étaient juste ici pour calculer les résultats. Et après cela, nous devons vraiment le calculer. Créons donc ici une valeur, par exemple, un résultat. Et nous voulons mettre ici une valeur plus dix. Et après cela, nous devons le mettre en espèces avant de le rendre. Dans ce cas, nous stockons nos résultats pour la prochaine bande. C'est ici que nous pouvons écrire la valeur monétaire égale au résultat. Dans ce cas, nous affectons de l' argent pour notre numéro neuf. Dans ce cas, quand la prochaine fois ici neuf, nous obtiendrons la valeur de l'argent comptant. Et après cela, nous pourrons simplement retourner notre résultat. Et c'est juste la valeur que nous avons calculée ici. Jetons un coup d'œil à ça. Je suis en train de recharger la page. Comme vous pouvez le constater, nous obtenons des résultats finaux de calcul. C'est notre premier essai ici et nous avons calculé 19, ce qui signifie que nous avons vraiment calculé quelque chose. Mais la deuxième fois ce charbon, nous avons récupéré du cash 19, qui signifie en fait que nous n'avons pas calculé cette fois-ci, ce nombre, mais nous l'avons pris à partir d'argent comptant. Et c'est de cette façon que vous implémentez généralement la mémorisation. Vous pouvez obtenir une tâche différente, mais l'idée est la même. Vous avez de l'argent, vous avez une fermeture, et vous devez fournir la valeur du cache et la placer dans le cache lors du premier calcul. 41. Fibonacci: Bienvenue dans des questions vraiment hilarantes, car ce truc que vous n'utiliserez jamais dans votre vie quotidienne comme un programmeur, mais vous devez savoir comment le résoudre. Et le premier ici, qui est mon design préféré, une fonction qui renvoie valeur de séquence Fibonacci et qu'ils n'ont pas essayé de fonctionner pour obtenir la valeur Fibonacci au cours des 12 dernières années, ce qui signifie qu' il n'est pas nécessaire. Mais j'entends constamment cette question encore et encore lors de l'entrevue. Et en fait, je pense que c'est très bien de demander à l'intervieweur. Je ne connais pas de formule pour Fibonacci. Pouvez-vous enregistrer , puis ils peuvent le coder. Ce n'est pas un problème. C'est tout à fait très bien parce que vous ne devriez pas connaître par cœur toutes les formules mathématiques. C'est ici que vous pouvez obtenir quelque chose ce genre à la suite de votre question. Vous pouvez donc voir ici que la séquence de Fibonacci est une séquence entière où les deux premiers termes sont 01 après la définition du terme suivant comme une somme des deux termes précédents. Et l'autre terme est la somme de n moins un et n moins deux, qui signifie en fait qu'il s'agit d'un début typique de la séquence que nous avons ici 0112. Et comme vous pouvez le voir ici, nous pouvons résumer par exemple 11 et nous arrivons ici avec quelque 12 ici avec quelque 12 et nous en avons trois, etc. Pour résoudre ce problème, nous devons fournir une fonction R, une valeur de séquence Fibonacci, ce qui signifie en fait l' indice dans la séquence. Par exemple, si nous voulons en fournir sept en guise d'argument, nous devons arriver ici au groupe à bande, car en fait, nous allons résumer 813 et nous en recevons 21. Appelons maintenant cet exercice. Et en fait, ici, nous utiliserons la récursion car nous voulons le calculer de manière récursive. Ici, nous pouvons créer une fonction Fibonacci et nous arrivons ici n, qui est notre index ici. Tout d'abord, nous devons vérifier s'il s'agit de moins de deux, car dans ce cas, nos liens logiques fonctionnent parce que nous avons ici 01. C'est ici que nous devons vérifier, d'accord ? Si n moins de deux, alors nous voulons en renvoyer un. Dans d'autres cas, nous devons appliquer notre logique. Ici, nous retournons simplement Fibonacci, et ici nous passons n moins deux, qui signifie que nous calculons cette fonction manière récursive et chaque appel récursif de Fibonacci, nous l'appellerons encore et encore jusqu'à ce que nous arrivions à cette première condition. Ici, nous avons Fibonacci n moins deux plus Fibonacci et moins un. Et en fait, c'est tout le code que vous devez essayer. Jetons un coup d'œil à ça. Je vais juste sauter dans la console et juste ici Fibonacci sept. Et comme vous pouvez le voir, nous en avons 21, ce qui signifie que notre code fonctionne. Mais voici quelques choses importantes à retenir. En tant que programmeur, vous devez savoir convertir des formules mathématiques ou une certaine logique. En JavaScript, les fonctions sont des fonctions dans n'importe quel autre langage, mais il est tout à fait normal de ne pas connaître par cœur toutes les formules mathématiques. C'est pourquoi vous ne devriez pas avoir peur de poser des questions à leur sujet. Deuxièmement, je pense qu'il est tout à fait bon de demander en retour. D'accord. Je ne peux pas vraiment coder, mais utilisez-vous ces choses tous les jours dans votre projet ? Et vous obtiendrez probablement une réponse non. C'est pourquoi, en fait, il n' est pas logique de demander ce truc en premier lieu. 42. Palindrome: Une autre question populaire que j'entends beaucoup est d'écrire une fonction pour vérifier le palindrome. En fait, c'est ce que font les programmeurs chaque jour. Ils vérifient les palindromes. Mais quoi que ce soit que nous puissions résoudre. En fait, si vous ne savez pas ce qu'est le palindrome, il s'agit d'une chaîne qui est la même depuis le début et la fin. Par exemple, si vous avez une chaîne complète, ce n'est pas un palindrome. Mais si vous avez, par exemple, pour o full string, c'est un palindrome car c' la même force que celle du Stat et de la fin. Essayons ça maintenant. Et en fait, c'est vraiment facile. Ce que nous voulons faire ici, nous voulons créer une fonction, c'est le palindrome. Et ce que nous voulons faire avec une solution judicieuse. Et en fait, il n'a aucun sens de le diviser par lettres et de vérifier chaque lettre, etc. Vous pouvez simplement inverser une chaîne et comparer. C'est pourquoi nous pouvons écrire ici que notre chaîne égale et que nous pouvons la comparer avec le fractionnement de points de chaîne. Et ici, nous fournissons juste une chaîne vide. Nous le divisons par lettres maintenant avec juste faire l' inverse, inverser dans notre tableau, puis nous le rejoignons à nouveau, ce qui signifie en fait où l'inverse dans ce monde et nous comparons deux mêmes mots. Dans ce cas, nous obtiendrons la même chaîne s' ils sont égaux. Voyons le Sud ici où se trouve juste dans palindrome Est et nous fournissons des informations complètes et nous devions faux. Mais si on veut écrire foo, foo, alors on se réalise. La tâche est résolue. 43. Anagramme: Une autre question que j' entends souvent est d'écrire la fonction qui vérifie que cette chaîne est un anagramme. Et en fait, ce truc est super similaire au palindrome, comme vous pouvez le voir ici, anagrammes de mots qui ont les mêmes caractères dans la même quantité, ce qui signifie en fait deux chaînes sont des anagrammes si nous pouvons réorganiser les chaînes et obtenir l'autre. Et voici quelques exemples d'anagrammes. Par exemple, écoutez, silencieux et ainsi de suite. Alors maintenant, écrivons la fonction est anagramme. Nous avons ici une anagramme et nous savons que nous obtenons ici deux points forts que nous voulons comparer. Nommons que c'est 31 et le deuxième flux. Ce que nous voulons vérifier ici, c'est que ces deux chaînes ont les mêmes lettres. Mais pour vérifier cela, nous devons ajuster le tri de nos chaînes. Dans ce cas, nous pouvons simplement comparer les chaînes par égalité. Mais tout d'abord, j' aimerais vérifier ici une longueur, car si nous avons une longueur différente dans ces deux cordes, cela ne fonctionnera pas. C'est pourquoi ici, si la longueur de notre première chaîne n'est pas égale à la longueur de notre deuxième chaîne, alors nous retournons simplement false et nous ne vérifions rien. Et bien sûr, ici devrait être bancaire et non égal, car nous voulons vérifier qu'ils ne sont pas égaux. La deuxième chose que nous voulons faire est de le convertir en minuscules, car en fait, nous pouvons avoir des casse différentes, mais les chaînes sont toujours valides. C'est Y. nommons le brin inférieur. Et ici, nous avons simplement appelé string1 en minuscules, et nous avons deux minuscules directement dans JavaScript. Ici nommons la chaîne la plus basse, et nous convertissons la chaîne en minuscules. Maintenant, ce que nous voulons vérifier, nous voulons vérifier si ces deux chaînes sont égales. Dans ce cas, nous avons maîtrisé le faux parce qu'il ne s' agit pas d'anagrammes. C'est pourquoi je vais écrire ici le flux de string1 est égal à la chaîne la plus basse deux, alors c'est faux et ce n'est pas un anagramme. Et le dernier, nous devons écrire notre logique. Et ce que je veux faire, je veux plus simple de convertir nos chaînes en tableau que certains tableaux et de les fusionner directement en chaîne pour ce week-end, n'est-ce pas ? Par exemple, trié la chaîne 1, et ici nous écrirons la chaîne la plus basse fractionnée d'un point. Et ici, nous voulons diviser uniquement par des lettres. Et ici, j'appelle juste le sort sans aucun argument. Il sera trié d'une manière ou d'une autre. Et après ce **** pour récupérer une ficelle, c'est y ici. Join nous ramènera une ficelle. Je veux faire exactement la même chose sur la deuxième chaîne. Et ici, nous pouvons maintenant les comparer car dans ce cas, nous avons trié toutes nos lettres dans la même direction. Et maintenant, je peux simplement écrire la chaîne de retour triée une chaîne triée égale à une chaîne triée. Dans ce cas, nous comparons deux chaînes qui ont été triées, et nous savons déjà qu'il est entré dans Chrome si elles sont égales, examinons cela. Je saute dans le navigateur et nous écrivons une anagramme. Ici, nous ne faisons que fournir complet et Byron. Et comme vous pouvez le constater, c'est faux car il s'agit de deux chaînes différentes. Mais essayons maintenant avec écoute et silencieux. Par exemple. Je suis ici en train d'écrire une leçon, et à droite, j'écris silencieusement. Et en fait, nous sommes en train de devenir véritables, et c'est ce que nous faisons ici. Tout d'abord, nous vérifions si la longueur est la même. Bienvenue ici, nous avons deux points forts, minuscules, donc nous ne sommes pas là. Et maintenant, nous sommes certains que ces deux chaînes ont été converties en tableaux, puis nous les reconvertissons en chaînes. Dans ce cas, nous obtenons quelque chose comme E et St., mais c'est très bien parce que nous voulons simplement les comparer. Et c'est ainsi que vous écrivez une fonction pour comparer les anagrammes. 44. Trouver des voyelles: Vous pourriez également obtenir une tâche comme celle-ci. Écrivez la fonction qui compte les voyelles dans la chaîne. Et ce ne sont pas toujours des voyelles, mais quelque chose que vous devez compter dans la corde. Et en fait, ce n'est pas si difficile car l'idée principale est que nous devons d'abord définir quelque chose comme un tableau de vacillations possibles ou de symboles possibles. Et ensuite, essayez de vérifier chaque lettre à l'intérieur nos forces. Allons le faire maintenant. Tout d'abord, ici, nous voulons créer une fonction phi et voyelles, et nous obtenons ici la chaîne comme argument. Maintenant, le deuxième foie doit définir ce que nos voyelles. Ici, nous pouvons créer un tableau de voyelles et définissons ici a, e, I, o et u. Et nous pouvons résoudre avec, de deux façons différentes, soit avec for-loop toujours réduire et en fait les deux vont bien. Ici. Tout d'abord, je veux créer un compteur parce que nous voulons augmenter chaque fois que nous trouvons notre voyelle, aurions besoin d'une boucle for. Donc ici, nous pouvons écrire le caractère principal, et voici une chaîne en minuscules. Dans ce cas, nous avons accès à chaque personnage notre chaîne et nous pouvons vérifier, accord, si les voyelles incluent notre personnage, alors nous voulons augmenter notre compteur. Voici donc compter plus, plus. Et après cette boucle for-loop, nous retournons simplement notre compte que nous avons créé. Ici. Essayons de trouver les intestins et nous avons une ficelle, comme vous pouvez le voir ici, nous recevons trois voyelles parce que nous avons ici trois fois. Et en fait, je dirais que ce code est correct, mais on peut mieux l'écrire avec réduit. C'est pourquoi je voulais commenter ce nombre de prospects et suivi directement ici, retourner une réduction. Donc ici tout d'abord, nous voulons convertir notre chaîne en minuscules. Donc ici, nous pouvons simplement essayer la chaîne en minuscules. Et après cela, nous voulons le diviser en personnages. Ceci est y ici sera divisé une chaîne vide. Maintenant, nous voulons appeler ici réduire et nous avons accès, tout d' abord à notre accumulateur et deuxièmement à chaque personnage. Après cette fonction, nous voulons définir notre nombre et il sera 0. L'intérieur est réduit. Nous voulons faire exactement la même logique. Nous pouvons revenir ici que si notre tableau de voyelles inclut le caractère que nous vérifions , nous voulons augmenter notre compteur. Ici, nous augmentons notre accumulateur avec plus un. Dans d'autres cas, nous ne l'augmentons pas et retournons simplement l'accumulateur. Vérifions que le sel que je recharge la page ici est la même chaîne et nous en avons trois. En fait, ce code est meilleur car tout d'abord, nous pouvons le lire ligne par ligne. Et deuxièmement, c'est entièrement pur et fonctionnel. 45. Convertir en cas de titre: Vous pouvez également obtenir une tâche pour convertir votre casse de titre de chaîne. Et en fait, c'est peut-être délicat. C'est pourquoi il est vraiment bon que nous ayons fourni ici des cas de test. Donc, en fait, nous devons construire un cas de titre de fonction. Et quand on nous fournit à l'intérieur, je suis une petite théière. Nous devrions renvoyer une chaîne et elle doit être majuscule. Et comme vous pouvez le constater, chaque mot ici est en majuscule, pas seulement le premier mot, et c'est important. Également. Peu importe comment nous fournissons notre chaîne, elle doit être correctement mise en majuscule. Construisons cette fonction maintenant. Et en fait encore, nous avons deux possibilités ici : nous pouvons utiliser for-loop over, utiliser des méthodes JavaScript natives. Donc, tout d'abord, écrivons cela en utilisant for-loop. Ici, nous créons une méthode de cas intitulée et nous obtenons une chaîne comme argument. Tout d'abord, nous voulons créer ici un tableau. Nous avons tous les personnages ici. Nous pouvons écrire ici que notre chaîne est égale à chaîne divisée en minuscules, et ici il y aura un espace. Donc, en fait, ici, nous écrivons un tableau dans une chaîne. Et en fait, j' écris du code comme celui-ci parce que je veux vous montrer comment vous ne devriez pas écrire votre code. Et il ne s'agit pas seulement de logique ici que nous utilisons for loop, mais nous considérons ce que vous faites, comme vous pouvez le constater, tout d'abord, la mauvaise pratique ici est d'utiliser le même argument que nous avons ici. Nous avons écrasé notre argument à l'intérieur, ce qui signifie que nous pourrions tout d'abord le modifier. Oui, ce n'est pas le cas avec la chaîne, mais ce sera comme ça. Les tableaux sont des objets car nous sommes plus définis dans une référence. Deuxièmement, nous revenons ici dans le tableau, mais ici nous l' écrivons dans un tel flux, ce qui rend la confusion. Et ces deux choses que vous ne devez pas faire dans votre code ou en entrevue. Parce que, avec cela, vous montrez que vous écrivez du code intégré. Une meilleure approche ici sera de créer un tableau de propriétés supplémentaire ou ce que vous voulez. Ici, nous obtenons une chaîne minuscules et tout va bien. Après cela, nous devons écrire pour boucle ici nous pouvons simplement écrire une boucle native for-loop, ce que je ne conseille pas non plus. Donc ici, nous pouvons écrire var I égal à 0, je suis inférieur à la longueur de chaîne. Et ici, je suis plus, plus. Et bien sûr, il n'y a pas de flux mais de notre tableau. Ici, à l'intérieur, nous pouvons maintenant muter chaque élément. Nous pouvons donc écrire ici tableau que j'égaux, et ici nous avons le même caractère point d' élément à 0. Et en fait, ce qu'il fait, c'est le premier élément de notre flux. Dans notre cas, chaque élément de notre tableau est une chaîne. Et ici, nous recevons la première lettre afin que nous puissions mettre en majuscules, ce qui est également une méthode native à l'intérieur de JavaScript. Et ici, nous pouvons écrire une tranche I dot. Et dans ce cas, nous recevons tous nos éléments de la chaîne à l'exception de la première lettre. C'est ce que nous voulons. Nous voulons mettre en majuscule la première lettre, puis prendre toutes les autres lettres. Et après cela, nous pouvons simplement rejoindre notre réseau. Nous sommes ici, nous retournons la jointure de tableau, et nous sommes rejoints , par espace. Maintenant, nous pouvons écrire ici le journal de la console, où deux-points ici au cas où étaient fournis à l'intérieur de notre chaîne. Je suis une petite théière. Voyons si ça marche. Je recharge la page et en obtenant une petite théière, ce qui a l'air bien et nous résolvons la tâche. Mais tout d'abord, nous avons utilisé ici le négatif quatre. Et comme je l'ai dit précédemment, ce n'est pas la meilleure approche si nous parcourons tous les éléments du tableau, au moins vous devez utiliser pour riche, pour le tableau et non pour quatre natifs, puis votre code ce sera mieux. La deuxième chose qu'ils n' aiment pas ici, c'est que nous écrasons chaque élément de notre tableau, ce qui signifie en fait que nous ne créons pas de nouveau tableau, mais que nous remplacons le précédent. Et ce n'est pas non plus la meilleure approche. C'est y. Réécrivons tout ce code simplement en utilisant des méthodes JavaScript simples. Parce qu'ici, nous n'avons même pas besoin de la boucle FOR. Ce que je voulais faire ici, je veux prendre notre chaîne et je veux la convertir en minuscules. C'était tout à fait très bien. Après cela, nous voulons le diviser avec de l'espace. C'était également très bien. Mais après cela, nous pouvons utiliser la carte car ce que nous faisons ici est essentiellement une carte. Nous voulons modifier chaque élément de la matrice. C'est pourquoi j'appelle Map et nous arrivons ici à notre conseil d'administration. Et en fait, comme vous pouvez le constater, c'est plus clair maintenant parce que nous utilisons le monde de la propriété et non pas une IA ou un tableau où nous ne savons pas de quoi nous parlons. Et ici, nous voulons faire exactement le même mot point à 0. Nous obtenons donc le premier élément. Ici, nous utilisons les majuscules, et ici nous utilisons plus, et nous prenons toutes les autres lettres avec tranche de points de mots et voici une. Et comme vous pouvez le constater, ce code est essentiellement le même. Nous ne l'avons pas changé , mais il est beaucoup plus efficace, plus facile à lire. Et cela montre que vous êtes un développeur plus avancé, car ici nous n' utilisons pas for-loop mais map, ce qui n'est pas si difficile. Et ici, nous revenons juste pour chaque mot de votre travail. Et il est important ici de mentionner que l'ajout et la tranche de caractères ne mutent pas dans les fonctions, qui signifie que nous recevons un flux jeunesse et que nous n'avons pas muté le flux Alt. Jetons un coup d'œil à ça. Je suis le Seigneur dans cette page et nous recevons nos chaînes en majuscules, qui signifie que j'ai oublié à la fin de faire notre géant ici, nous pouvons simplement appeler que je rejoindrais l'espace à l'intérieur. Jetons un coup d'œil et nous obtenons exactement la même chaîne. Je vous recommande donc vivement à l'intervieweur de regarder votre nom, vérifier que vos types de données correspondent à vos noms et de rendre votre code plus facile à lire si c'est possible. 46. Convertir l'entrée temporelle donnée en 12 heures Format en 24: Voici une autre tâche qui nécessite un peu de réflexion. Et comme vous pouvez le voir, nous devons écrire la fonction qui permet de convertir l'heure donnée au format 12 heures au format 24 heures. Nous avons ici des cas d'utilisation. C'est pourquoi il est plus facile pour nous vérifier si nous sommes bien couverts. Essayons donc de créer cette fonction. Et encore une fois, ce n' est pas une fonction que vous pouvez résoudre en trente secondes. Vous pouvez donc prendre votre temps et y réfléchir un peu. Créons ici la conversion au format 24 heures. Et nous recevons ici un texte temporel. Et en fait, ce que je voulais faire ici en premier, je veux le convertir en minuscules, car en fait, ici, nous obtiendrons AM et PM et nous voulons être sûrs qu'ils sont en minuscules. C'est pourquoi nous pouvons essayer ici le temps de XT plus bas. Et ici, nous voulons appeler le texte temporel en minuscules. La deuxième chose que je veux faire est obtenir des heures et des minutes séparément. Ce que je veux écrire ici, c'est la division temporelle plus lente et nous voulons diviser par colonne parce qu'en fait nous avons deux points dans chaque cas. Et à gauche, nous avons nos heures, et à droite, nous avons des minutes. Et en fait, ici, je veux faire une destruction et une affectation ici directement. Je veux d' abord avoir nos heures et deuxièmes minutes. Dans ce cas, nous créons deux variables locales. Si vous ne voulez pas écrire comme ceci, vous pouvez le nommer avec une variable de température T, puis lire cette variable temporaire points heures et minutes. Mais ici, nous en arrivons à des choses difficiles. Comme vous pouvez le constater, parfois nous n'avons qu'un seul chiffre et parfois nous avons deux chiffres. Mais nous avons également un cas où nous avons des zéros au début. Ici. Nous avons également un autre cas que nous devons couvrir. Si nous avons ici 12 comme nôtres, nous devons le convertir en zéros 0. C'est pourquoi j'ai voulu écrire exactement cette logique. Donc Eve Time coche plus lentement le point et la largeur et se termine en fait avec Israël. Une belle fonction en JavaScript qui vérifie le tostring se termine par quelque chose. Ici, nous pouvons vérifier la présence de AM parce que nous savons qu'ici nous avons 12 heures du matin et cela signifie que nous devons le convertir en deux zéros. C'est pourquoi ici je veux écrire les nôtres égaux, et ici nous vérifions si nos heures égales à 1212 sous forme de chaîne, car ici nous sommes divisés dans notre chaîne, alors nous voulons obtenir 0. Dans d'autres cas, nous arrivons ici des heures. Et comme vous pouvez le voir, tout d'abord, j'ai écrit ici un seul 0 et non deux zéros. Et c'est également important. Ici, je viens d' attribuer directement des heures, qui signifie que nous avons couvert cette logique pour obtenir un seul 0 et, dans tous les autres cas, j' obtiendrais juste ce que nous obtenons. S'il y a cinq, on en aura cinq. Si c'est 01, nous obtiendrons 01. Nous avons couvert notre AMK, c'est maintenant que je voulais couvrir l'affaire PM. C'est pourquoi, ici, nous pouvons écrire d'autres choses et peut-être même si, parce que nous voulons vérifier la présence de PM. Et ici, nous pouvons écrire des points et des largeurs plus lents, et nous obtenons notre PM. Et dans ce cas, nous voulons appliquer une logique différente. Nous voulons attribuer nos heures ici et nous voulons vérifier si nos heures sont égales à 12, car il s'agit là encore d'un autre cas. Dans ce cas, nous voulons appliquer ici des heures, ou nous voulons écrire ici la chaîne et les heures plus les 12 derniers. Ce code fait beaucoup, comme vous pouvez le voir ici, j'ai écrit plus des heures, ce qu'il fait en fait, nous recevons nos heures sous forme de chaîne. Disons donc que nous arrivons ici 12. Maintenant, si je veux écrire ici plus au début, nous obtenons ici directement le numéro d'une chaîne, qui signifie en fait que nous convertissons cela en nombre et ensuite nous faisons plus 12. Pourquoi est-ce que c'est ? Parce que disons ici que nous vérifions PM, par exemple, cette affaire avec 01, et que nous vérifions, Ok, les heures sont égales à 12, Non, alors nous voulons faire 01 plus 12. Voyons comment ça va se passer dans le Sud. Nous arrivons donc ici 01 et en fait, il est converti en un seul. Et maintenant, après cela, nous obtenons plus 12 et nous entrons dans l'étain, ce qui signifie en fait qu'en ajoutant 12, nous le convertissons à l'heure PM correcte. Et si nous avons 12 heures comme ça, nous le laissons simplement comme 12 heures. Donc, en fait, ici, nous pourrions écrire 12, nous pourrions prendre nos heures. Donc, ce que je veux faire maintenant, je veux vérifier ce que nous recevons en quelques heures. Alors ici, je veux consoler notre format Convert to 24 heures, et voici nos textes horaires et nos heures. Et maintenant, je veux copier tous ces cas et les exécuter. Dans ce cas, nous pouvons vérifier qu'ils fonctionnent correctement. Je suis en train de recharger la page et nous obtenons affectation à constante, variable. Et comme vous pouvez le voir ici, nous essayons d'écraser le nôtre. Et bien sûr, c'est interdit. C'est pourquoi nous devons écrire ici des LED. Jetons un coup d'œil à ça. Je suis en train de recharger et nous recevons 412045512120113. Ici, nous avons le PM 11231022, ce qui signifie que notre logique pendant des heures est correcte. Après cela, nous devons ajouter un 0 en tête dans tous ces cas. Et comme vous pouvez le constater, parfois nous n'en avons pas besoin et parfois nous devons l'avoir et nous pouvons facilement le résoudre avec une autre fonction JavaScript simple. Nous pouvons écrire ici, notre point de départ. Ici. Nous pouvons fournir à 0. Ce qu'il fait, c'est que vous pouvez voir ici qu'il tamponne la chaîne actuelle avec une autre chaîne plusieurs fois si nécessaire. Ce qui signifie que nous fournissons ici un outil, ce qui signifie que nous aurons deux symboles et que nous avons ici 0, ce qui signifie que si nous n'avons pas de symbole là, nous mettrons 0 à l'intérieur. Et en fait, je veux copier cette partie et simplement mettre dans notre journal de la console pour vérifier si elle fonctionne. Je suis en train de recharger la page et comme vous pouvez le voir maintenant, nous avons le bon moment. Nous avons donc deux zéros, 05, puis tous sont corrects. Nous devons maintenant mettre en œuvre nos procès-verbaux et c'est beaucoup plus facile. Tout d'abord, pour vous rappeler que dans les minutes, il y aura aussi PM et TM et nous devons nous en débarrasser. C'est pourquoi nous pouvons écrire ici directement signifie tranche de points et ici nous utilisons 0 moins deux. Dans ce cas, nous allons nous débarrasser de deux symboles, AM ou PM, et nous n' aurons que quelques minutes ici. Et après cela, je veux utiliser le brin PET, comme nous l'avons fait précédemment. Et il y en aura également 20. Dans ce cas, nous allons vérifier, OK, si nous en avons huit ici, alors nous devons obtenir ici une pseudo-aide. Si nous avons ici deux chiffres, alors c'est tout à fait correct. Maintenant, nous pouvons simplement supprimer ce journal de console, mais nous n'en avons plus besoin. Et en fait, dans tous les cas, je veux écrire le journal de la console. C'est Y. Changeons ça. Maintenant. Je veux écrire ici le journal de la console, puis l'ouvrir. Et ici, nous avons converti. Et fermons, c'était un support. Maintenant, nous avons tous nos cas. Allons-les voir. Je suis en train de recharger la page et nous recevons notre temps, et il semble totalement bien ici, par exemple, nous avons des zéros de minute 0 à 35508 et ainsi de suite. Mais le problème, c'est que nous avons oublié de mettre une colonne entre eux. C'est ici que nous devons écrire plus et entre eux simplement mettre une chaîne avec deux points. Et comme vous pouvez le constater maintenant, nous passons un bon moment au format 24 heures. Et en fait, de mon point de vue, il est difficile de résoudre cette tâche en cinq ou dix minutes. Vous devez vraiment vous asseoir là, peut-être 15 minutes ou une demi-heure pour vérifier les différents cas, comment vous voulez le résoudre et ainsi de suite. C'est donc une bonne tâche de vérifier comment convertir différentes choses entre elles avec une logique différente. Mais ce n'est pas quelque chose que vous pouvez résoudre en une ou deux minutes. 47. Mappage des données: Voici une tâche supplémentaire pour vous qui découle du projet réel. ne s'agit pas seulement de certaines tâches pour l'entretien, mais des tâches que vous verrez dans votre vie quotidienne. Et comme vous pouvez le voir, où doivent mapper données au premier plan et au format, ce qui signifie que nous obtenons nos données, par exemple, du backend, et non pas de les informer comme nous le voulons. C'est pourquoi nous voulons les convertir. L'élément principal est la clé de localisation, et nous devons y mapper toutes les données, et nous l'aurons alors cinq objets. Comme vous pouvez le voir ici. Tout d'abord, nous avons un tableau de localisation, et ici nous avons deux objets. Tout d'abord, la clé de localisation et c'est notre identifiant unique. Et nous avons ici quelques idées et l'extérieur assignent exactement la même chose dans le deuxième objet. Et maintenant, nous avons un tarif configuré en masse. Il s'agit également du tableau contenant des objets. Et à l'intérieur de chaque objet, nous avons des valeurs de données et des conflits conservés. Le point principal est que nous les mappons un à un, ce qui signifie en fait que l'index 0 dans tableau de localisation est égal à 0 index de configuration en bloc. Et dans ce cas, nous devons tout faire correspondre à la structure. À la fin, nous devons obtenir un tableau d' objets avec tout d'abord une clé de conflit. Il s'agit de cette partie et emplacement plus proches de deux, comme vous pouvez le voir, emplacement kids a22 est cette partie et également externe qui lui est assignée, ce qui signifie qu'un deuxième élément sera également en conflit Kit de localisation 100 lorsque T2, c'est notre deuxième numéro, puis l'affectation externe et ainsi de suite et ainsi de suite. Et on dit que l'ID unique est rapide, ce qui signifie en fait que nous obtenons ici 12345 objets. L'Avent doit donc avoir un tableau avec cinq objets. Essayons maintenant d' écrire cette logique et nous n'aurons rien de compliqué ici. Tout est question de cartographie des données. Essayons ici. Notre résultat, comme je veux le faire donne directement des boucles de manière efficace. Et ils ne seront pas là pour travailler avec l'emplacement simplement parce qu'à l'intérieur, nous avons nos identifiants uniques. Et ici, à l'intérieur de l'emplacement, nous obtenons une carte, ce qui signifie que nous parcourons ces objets en boucle. Ici, à l'intérieur de la carte. Nous obtenons un élément de localisation et nous obtenons ici l'index. C'est pourquoi je dois mettre des crochets supplémentaires ici. Emplacement n, l'indice est ce que nous devons faire. Maintenant, à l'intérieur, nous pouvons faire notre magie car maintenant à l'intérieur de l'élément de localisation, ils obtiennent tous les objets que nous voulons ici, une carte de taupe, car à l'intérieur de notre élément de localisation, nous voulons faire une boucle via notre clé de localisation. C'est pourquoi nous pouvons renvoyer ici notre élément de localisation, et ici nous avons notre clé de localisation. Ici, j'ai également une carte et nous avons accès à notre clé de localisation. Et comme vous pouvez le voir, je l'ai écrit avec CamelCase parce que nous sommes dans le code JavaScript et généralement toutes nos variables sont CamelCase. Maintenant, ici, à l'intérieur, nous voulons rendre ce dont nous avons besoin. Tout d'abord, nous avons besoin ici d'une clé d'allocation. C'est pourquoi j' écris ici la clé de localisation. Nous pouvons le laisser avec un trait de soulignement comme du backend, surmonter, le convertir en majuscules dépend juste de ce que vous voulez. Et ici, nous ne faisons qu' attribuer notre clé de localisation. Après cela, nous devons obtenir notre clé de conflit. C'est extrêmement facile à faire car ici, dans les conflits en masse, nous pouvons simplement obtenir cette clé de conflit par index. C'est pourquoi nous pouvons écrire ici index de configuration Bow car il s'agit mêmes valeurs de données de points de lac et de localisation , clé de configuration de points. Et la dernière partie est le signe delta d'affectation externe. Nous arrivons à l'intérieur de l' élément de localisation, pointez un panneau. Et c'est ainsi que nous avons redéfini ce dont nous avions besoin. Tout d'abord, nous avons une carte à travers notre emplacement, à travers le sujet. Et dans une carte, nous avons pour notre clé de localisation. C'est pourquoi, pour chaque identifiant unique, nous pouvons cartographier les données dont nous avons besoin. Jetons un coup d'œil à ça. Je vais écrire verrou de console ici notre résultat, et vérifions si cela fonctionne. Je suis en train de recharger la page et nous obtenons un tableau de tableaux. La première baie que nous obtenons ici, clé de localisation est configurée en extérieur, assignez, et tout va bien. Le seul problème que nous avons est que nous obtenons un tableau de baies, mais nous voulons en fait un tableau plat. C'est pourquoi nous devons faire quelque chose avec ce code. Nous pouvons utiliser ici réduisez pour créer simplement un tableau plat car nous n'avons pas méthode aplatie nativement dans JavaScript. Nous avons ici notre tableau et l'accumulateur. Et au début, nous pouvons dire que nous avons un tableau vide. Ce que nous voulons faire à l'intérieur, c'est utiliser array.com caténate. Et ici, nous sommes concaténés et c'était un accumulateur. Ce qui est fait ici par défaut, nous avons ici un tableau vide et nous avons tous les tableaux que vous pouvez voir ici. Et nous voulons concaténer notre tableau avec un accumulateur. Donc, essentiellement pour chaque élément, nous le concaténons avec notre accumulateur. Jetons un coup d'œil à ça. Je suis en train de recharger la page et nous recevons notre tableau fui avec des sujets. C'est ainsi que vous mapper des données, par exemple, du format backend à notre format frontal. 48. Remplacer les paramètres dans l'URL: Vous pourriez également obtenir une tâche comme celle-ci. Créez une fonction pour remplacer les paramètres dans l'URL. Et en fait, c'est une tâche réelle car nous avons ici une URL initiale, comme elle est générée dans anciens routeurs pour tous les frameworks front-end. Et dans ce cas, nous avons une barre oblique d'URL initiale, fois barre oblique et ici colonne postérieure barre oblique AD, commentaire ID de commentaire de colonne, ce qui signifie que ces deux paramètres avec des colonnes seront remplacés par des ID à un moment donné plus tard. Et démontrez en fait une fonction remplacement des paramètres dans l'URL où nous pouvons jeter à l'intérieur de l'URL avec une telle structure et un tableau de remplacements. Et comme vous pouvez le voir à l'intérieur de chaque objet, nous devons fournir depuis et vers, par exemple, depuis post-Covid signifie que nous devons remplacer les deux-points post AD par id1, et ici commentés par 83. Et bien sûr, cette fonction doit être génétique. Il ne s'agit pas seulement de publications et de commentaires, mais aussi de tout remplacement dans l'URL. Et en fait, avant que nous commencions à résoudre, je veux vous montrer une autre chose, comment vous pouvez penser à résoudre les problèmes. Par exemple, vous pouvez écrire quelque chose comme une liste de choses à faire. Et dans ce cas, nous essayons de réfléchir par étapes à ce que nous voulons mettre en œuvre. Par exemple, quelle sera la première étape ici ? Comme vous le voyez, nous avons un tableau de nos remplacements, ce qui signifie que nous avons une fonction avec deux arguments. En fait, nous voulons parcourir chaque remplacement en boucle et appliquer ce remplacement à notre URL. Donc, en fait, ici, nous pouvons écrire des remplacements. La seconde consistera peut-être à remplacer des parties de chaque remplacement. La dernière chose que nous serons ici, revenez dans votre flux. Cette liste, dans ce cas peut sembler évidente, mais elle peut être utile si vous écrivez quelque chose comme celui-ci pour implémenter une mais elle peut être utile si vous écrivez quelque chose comme celui-ci logique plus complexe. Et en fait, je veux directement mettre en œuvre ici une solution correcte. Et nous pouvons utiliser réduit pour cela parce que c'est énorme notre code le mieux. Mais je veux aussi vous montrer le seul problème que vous pourriez faire. En fait, nous voulons créer notre fonction, remplacer les paramètres dans l'URL, et nous obtenons ici l'URL et notre liste de remplacements. Et en fait, ce que nous voulons faire ici est réduit pour nos remplacements, les remplacements réduisent. Et ici, nous avons notre fonction avec accumulateur et chacun de remplacement. Cette valeur initiale nous a ici notre URL, car c'est ce que nous voulons changer. Maintenant, à l'intérieur de la fonction, nous devons renvoyer une chaîne mise à jour. Et pour cela, nous pouvons utiliser une fonction JavaScript simple appelée remplacée. Et en fait, ici, vous pourriez essayer de dessiner comme ça. Vous pouvez penser, Ok, j'ai une URL, nous pouvons simplement écrire ici, URL équivaut à remplacer le point d'URL. Ici, nous remplaçons tout d' abord la colonne et le point de remplacement, et nous le changeons en point de remplacement t2. C'est ça. Et après cela, nous voulons renvoyer notre URL. Et en fait, ce code semble plutôt correct. Et maintenant, je veux déplacer notre URL initiale et nos résultats ici vers le bas et écrire l'URL du résultat du journal de la console. Et voyons ce que nous avons. Je suis en train de recharger la page et nous obtenons exactement une barre oblique, barre oblique commune trois, qui signifie en fait que cette logique avec réduction fonctionne correctement. Nous parcourons chaque remplacement en boucle. Ici, nous avons mis à jour notre URL et ici nous la retournons et n'a pas l'air bien, mais en fait, vous avez ici un énorme problème. Comme vous pouvez le voir, ma variable d' accumulateur n' est pas mise en surbrillance, ce qui signifie que nous n'utilisons pas ici correctement la réduction et que nous n' utilisons pas du tout d'accumulateur. Ce que nous utilisons, nous utilisons cette URL de params et nous mutons directement cette URL à chaque fois. Et en fait, c'est complètement faux, tout d' abord, parce que nous ne devons pas muter nos paramètres. Deuxièmement, la partie la plus importante que nous utilisons ici se réduit comme une boucle for-car en fait, nous faisons simplement muter notre variable de l'extérieur dans la boucle et nous n'utilisons pas notre accumulateur. En fait, le code correct ici n'est pas remplacé, mais simplement renvoyer le remplacement accumulé. Parce que, comme vous pouvez le constater, nous avons fourni ici rail ici comme valeur initiale et nous ne devrions pas utiliser d'URL ici à l'intérieur. Nous ne voulons pas modifier notre URL. Nous voulons chaque fois mettre à jour notre accumulateur et revenir dans un nouvel accumulateur. Comme vous pouvez le constater, ce code fonctionne exactement de la même manière, mais c'est complètement différent. Auparavant, si vous écriviez du code comme celui-ci, c'est complètement faux lors l'entretien car vous n' utilisez pas réduit, réduit, mais tout comme for-loop, va de même pour la carte. Si vous utilisez la carte uniquement pour parcourir éléments que vous effectuez une tendance avec la carte, vous devez transformer votre tableau et le renvoyer. 49. Messages de validation: Vous pouvez également obtenir une question comme celle-ci pour message de validation du backend MOD à l'avant et au format. Et en fait, c'est un vrai exemple car parfois nous recevons des messages de validation backend, non pas dans le format approprié rapidement dans le frontal pour nos formulaires JavaScript. C'est pourquoi nous obtenons ici nos erreurs de backend dans un tel format. Nous avons ici un objet avec des clés et chaque clé est une propriété du back-end. Notre domaine que nous validons, par exemple, le courrier électronique. Et ici, nous avons rempli les erreurs, et c'est ce qui est intéressé par les erreurs de fichiers est un tableau d'objets. Et à l'intérieur de chaque objet, nous avons une propriété de message avec un message. Par exemple, nous avons ici un mot de passe avec deux erreurs. Voici ce qu'est un tableau avec deux objets. Ici, le message doit contenir des symboles dans différents cas et doit comporter au moins huit symboles lentilles. Ce que nous voulons faire dans cet exercice, nous voulions le convertir à notre front et à notre format. Il s'agit simplement d'un tableau planaire avec des chaînes et chaque flux est notre clé. Donc, notre courrier électronique alimenté comme, et maintenant nous avons toutes nos erreurs concaténées comme par exemple, ne peuvent pas être vides. Et si nous en avons deux , nous les concaténons simplement avec des virgules. En fait, vous pouvez le résoudre de différentes manières, mais je recommande vivement d' utiliser un objet entré ici. Nous pouvons simplement écrire ici des entrées de points d'objet et fournir des erreurs à l'intérieur de notre backend. Et comme vous pouvez le voir, nous obtenons format aussi agréable que le tableau de tableaux. Et chaque tableau ici est tout d'abord, suivez une clé et la valeur est celle que nous avions ici. Nous avons donc une valeur avec des erreurs et à l'intérieur, nous avons nos erreurs. Et c'est vraiment un format très confortable à travailler pour nous car nous ne pouvons pas vraiment appeler carte en JavaScript sur l'objet. C'est pourquoi ce que nous voulons faire ici, nous voulons tout d'abord créer une propriété normale peut être des erreurs de backend lisibles par l'homme. Et maintenant, nous voulons appeler ici les entrées de points d'objet. Et nous voulons fournir des erreurs internes à notre backend. En fait, nous avons maintenant un tableau de tableaux et nous pouvons cartographier ici chaque valeur. Et vous avez déjà vu ce que nous avons ici. Nous recevons un tableau avec le courrier électronique comme clé et une certaine valeur. Et en fait, ici, je veux utiliser la structure régulière pour obtenir d' abord notre clé et notre deuxième boucle, nous obtenons notre valeur. C'est le moyen le plus simple d' utiliser la carte sur l'objet. Et ici, nous obtenons tout d'abord notre champ et deuxièmement, nous apprécions les erreurs. C'est pourquoi nous devons préparer nos erreurs. Dans ce cas, appelons-les, par exemple, des messages de champ et nous devons les concaténer. Nous pouvons donc écrire ici des erreurs de points de valeur. Nous obtenons donc notre panoplie d'erreurs. Et maintenant, nous devons cartographier chaque erreur. Ici, nous appelons map sans erreur et nous voulons renvoyer un message d'erreur. Et comme vous pouvez le constater ici, c'est vrai. Nous avons ici un tableau avec des objets et chaque objet contient notre message. Ici, nous ne faisons que cartographier ces messages. Et après ce groupe, j'ai voulu obtenir leur nom. Ici, je vais mettre joindre la virgule et l'espace parce que nous sommes nés pour avoir une belle chaîne lisible. Et après cela, nous devons simplement renvoyer notre chaîne car nous sommes à l'intérieur de la carte ici. Je veux utiliser ici le script ECMO sixième chaîne, et à l'intérieur ils voulaient fournir notre clé. Mais voici le problème. Comme vous pouvez le constater, il est toujours en majuscule. Tout d'abord, nous devons le capitaliser et nous l'avons déjà fait dans les vidéos précédentes. C'est ici que nous pouvons le nommer champ majuscule, et en fait je pense remplir ce meilleur nom. Nous allons donc renommer notre clé en champ. Et maintenant, nous devons faire appel au champ, tout d' abord le personnage à 0. Dans ce cas, nous sommes pris notre premier élément et nous voulons concaténer la tranche de points remplie. Et ici, nous en mettons un, été découpés en un seul symbole. Dans ce cas, il s'agit de notre nom majuscule du champ. Nous devons maintenant fournir ce champ capitalisé, et c'est ici que D est important. Dans d'autres cas, on peut penser que c'est une fonction et après cela, on a simplement mis de l'espace colonne. Et voici nos messages sur le terrain. Ce que nous faisons ici, nous effectuons un mappage à travers nos entrées d'objets où nous obtenons directement notre champ et notre valeur. Tout d'abord, nous rejoignons nos messages sur le terrain. Deuxièmement, nous capitalisons notre domaine et maintenant nous retournons le flux pour chaque erreur. Jetons un coup d'œil à ça. Je recharge notre page et vérifions ce que nous avons dans les erreurs lisibles par l'homme. Et comme vous pouvez le constater, c'est notre joli tableau dans le bon format. Nous avons donc ici des chaînes pour chaque champ et nous mettons majuscule le nom de chaque champ. Et ici, nous avons rejoint nos erreurs, ce qui signifie que nous sommes parvenus à résoudre ce problème et à transformer les données dans le bon format. 50. Liste imbriquée: Vous pourriez également avoir une question comme celle-ci. Transformez la liste plate en liste imbriquée. Et c'est un truc super réel. Généralement, depuis le backend, vous obtenez toutes les données sous forme de liste plate et ces données peuvent généralement avoir des enfants les uns des autres. Ce qui signifie que pour nous, dans le front end, il n'est pas confortable de rendre ces données. Nous pouvons simplement aller en boucle parce que nous avons des enfants. Nous devons d' abord rendre sur petits niveaux, puis pour chaque élément, trouver ses enfants et les rendre. C'est pourquoi vous ne souhaitez généralement transformer vos données d'une liste plate en liste imbriquée qu'une seule fois. Et c'est exactement ce que nous devons faire dans cette vidéo. Comme vous pouvez le voir ici, nous avons notre liste à plat et chaque élément est un objet. Nous disposons d'un identifiant unique, d'un nom et de données parentales. Tout d'abord, c'est important car il s'agit notre identifiant unique et, deuxièmement, ID parent et il peut être ajouté à un autre élément. Par exemple, ici, parent, il s'agit de cet article. Cet objet est donc parent de cet objet. Deuxièmement, les données parentes peuvent être nulles s'il s' agit d'un élément racine et qu'il n'y a pas de parent. Comme vous pouvez le voir ici, nous avons deux éléments racine avec ad1 et deux. Nous avons maintenant un D3, qui est l'enfant du parent edu un. C'est donc le deuxième niveau. C'est là que le nom est son niveau deux, point trois. Vous comprenez donc le niveau. Et maintenant, nous avons un défaut, qui est apparemment D trois, qui signifie en fait qu'il s'agit d'un enfant de cet élément et que ce parent trois est le suivant. C'est pourquoi c'est le niveau trois, l'article quatre. Et ici, nous avons ad5, qui est en fait un enfant du parent D deux, qui signifie cet élément et en fait c'est ainsi que nous obtenons généralement des données du backend. Nous devons maintenant le transformer dans un tel format. Nous avons donc un tableau plat avec seulement deux éléments. Ainsi, comme vous pouvez le voir ici, nous avons deux objets objet avec 81 et l'objet avec ad2 car ils sont tous les deux via des éléments et leurs données parentes le sont maintenant. Maintenant à l'intérieur, nous avons une nouvelle propriété enfants. Et c'est exactement les enfants qui sont cartographiés à l'intérieur. Et ici, comme vous pouvez le voir, nous avons ad3 et aussi des enfants à l'intérieur parce qu'en fait ad4 est imbriqué dans D trois et exactement la même chose que nous avons ici. Nous avons à l'intérieur de D deux enfants et ici ad5 et des enfants. Et j'ai omis ici les noms parce qu'ils ne sont pas importants pour comprendre. Mais évidemment, vous pouvez avoir toutes les propriétés supplémentaires ici. Et comme vous pouvez le constater au dernier niveau, on n'a pas d'enfants. Ensuite, nous arrivons ici, les enfants, un tableau vide. Notre tâche consiste donc maintenant à transformer la liste plate en liste imbriquée. Et comme l' a dit l'aîné précédemment, pour certaines personnes, il est beaucoup plus facile d'essayer de montrer comment ils vont le résoudre et ensuite de le coder. C'est pourquoi. Essayons de le faire maintenant. Tout d'abord, je vais écrire ici pour faire ce que nous faisons. Le premier point est de se débarrasser des éléments, car c'est ce que nous voulons rendre. Essayons, comme ça, obtenir les éléments racine. Nous devons donc avoir un tableau de nos éléments racines. Le deuxième point est de vérifier tous les enfants et de comprendre si nos deux éléments ont des enfants. Si ce n'est pas le cas, nous les retournons simplement aujourd'hui. Si oui, nous devons trouver des enfants de manière récursive. Et nous devons le faire de manière récursive car nous devons vérifier chaque élément et vérifier s'il a des enfants. Nous pouvons donc écrire ici quelque chose comme ça. Vérifiez que les enfants ont des enfants. Et maintenant, le prochain point sera, sinon, nous retournons simplement l'article avec des enfants vides. Et le numéro quatre ici est si oui, alors nous voulons passer au numéro deux, ce qui signifie en fait que nous faisons le numéro deux manière récursive jusqu'à ce que nous soyons à la fin de nos éléments. Essayons maintenant d'écrire le code. Donc, tout d'abord, je veux l' attribuer à notre liste imbriquée. Et ce que je veux faire, je veux prendre notre liste à plat et trouver des petits éléments. Et pour cela, nous pouvons simplement utiliser le filtre car nous voulons trouver tous les éléments où se trouve notre identifiant parent. Dans ce cas, nous pouvons simplement dire que notre identifiant parental article et point d'article est égal à nul. Nous sommes donc prêts à y aller. Jetons un coup d'œil à ça. Heure de chargement dans la page. Et maintenant, nous avons notre liste imbriquée. Comme vous pouvez le constater, nous avons notre gamme d'objets. Et ici, nous en avons 81 et 82 parce que leur parent. C'est le cas maintenant. C'est exactement ce que nous voulions. Après cela, je veux juste écrire cette carte et à l'intérieur de la fonction en tant qu'enfants. Pourquoi je fais ça ? Parce qu'en fait, cette fonction sera appelée récursivement et qu'elle serait complètement apatride, qui signifie que nous devons appeler cette fonction sur n'importe quel élément et qu'elle doit fonctionner. C'est ce que je veux créer ici. Notre fonction ADD enfants fonctionne et nous recevons ici un article mais nous n'avons besoin de rien d'autre car nous avons ici notre liste plate en haut. Si vous ne l'avez pas disponible en haut, vous pouvez peut-être obtenir ici un deuxième argument, une liste plate dans votre code, mais ce sera dans votre projet réel. Ici, nous avons accès à notre liste de fuites. Donc, ce que nous faisons ici, nous parcourons nos éléments racine et nous cartographions les enfants, ce qui signifie en fait si nous voulons ajouter des enfants à chaque élément d'itinéraire. Donc, tout d'abord, nous devons trouver nos enfants. Alors, juste ici, les enfants. Et nous savons que nos enfants ne sont qu'une liste plate, qui est filtrée par les données parentes dont ID est égal à l'ID de point d'article. Alors, faisons-le. Maintenant, nous prenons simplement une liste plate, un filtre à points, et ici nous avons notre enfant et donnons un nom, par exemple, article enfant et nous voulons vérifier ID parent du point d'article enfant est égal dans notre ID de point d'article. Dans ce cas, nous trouvons tous nos enfants. Voyons console.log ce que nous avons ici. Je n'écris donc que des enfants soulignés dans la page. Et comme vous pouvez le voir ici, nous avons un seul élément, car il s'agit d'un élément photo enfant avec un D1. Et ici, nous avons aussi un autre enfant d'élément fruit avec le parent 82, ce qui signifie qu' il fonctionne correctement. Le prochain point est de vérifier si nous avons des enfants. Nous pouvons donc écrire ici. Si nos enfants ont une longueur supérieure à zéro, alors nous devons faire notre magie récursive car nous devons non seulement obtenir des enfants d'enfants, mais nous devons le faire de manière récursive. Ce que je veux faire avant de vouloir créer un garçon de propriété était propre aux enfants et ils veulent attribuer ici tableau vide parce qu' en fait, si nous ne sommes pas à l'intérieur du SIF, nous n'avons pas besoin de changer. n'importe quoi. Nous devons simplement renvoyer les enfants vides. Et comme vous pouvez le voir, j'ai assigné par défaut un tableau vide ici afin que nous puissions renvoyer ici objet assigné et ici je suis. À droite, un objet vide, puis une virgule, un élément, une virgule. Et voici nos enfants. Enfants imbriqués. Pourquoi ai-je écrit comme ça ? Parce qu'en fait, si vous utilisez ici push ou simplement avec stocké, vous dites que voici nos enfants imbriqués. Ensuite, vous allez muter l'élément, ce qui signifie que vous allez modifier cet élément dans liste plate car nous avons une référence d'objet. Nous ne voulons pas cela. Nous voulons simplement renvoyer vos données. C'est pourquoi j'utilise ici l' objet assigné avec un objet vide. Après cela, nous utilisons notre article afin que nous copions toutes les propriétés de notre article à l'intérieur de ce nouvel objet et nous avons été signés ici dans votre propriété enfants, ce qui est notre nôtre pour les enfants. Et dans ce cas, nous avons simplement laissé les enfants imbriqués vider l'objet. Jetons un coup d'œil à ça. Heure de chargement dans la page. Voici notre liste imbriquée. Et comme vous pouvez le voir, nous avons maintenant des enfants vides tableau parce qu' en fait, nous n'avons pas écrit de logique pour cette veille. C'est pourquoi nous renvoyons simplement des données dans tel format, nom d'ID parent en fait, tous les champs et en plus des enfants. Et comme vous pouvez le voir, nous n'avons ici que deux éléments, qui signifie en fait que tout fonctionne correctement et nous devons appeler ici de manière récursive notre code. Donc, ce que nous voulons faire ici, nous voulons examiner chaque enfant et appeler les enfants à fonctionner sur cet enfant. Nous pouvons donc assigner ici nos enfants imbriqués. Et ce n'est que nos enfants, cette carte. Et nous avons accès à chaque enfant. Et nous appelons cela des enfants avec notre enfant. Que se passe-t-il dans ce cas ? Par exemple, nous avons trouvé l'enfant. On est en train de vérifier ici, d'accord ? Nous avons un enfant dans, disons, des enfants. Et ici, nous sommes en train de cartographier notre réseau. Et pour chaque élément, on appelait les enfants la partie la plus importante qui était Colin cette fonction récursive. Tout d'abord, nous l'avons appelé ici à l'intérieur de l'élément racine. Maintenant, ici, à l'intérieur des enfants se trouvaient Colin, c'était une carte. Et quand nous l'avons appelé ici, il y avait des enfants de poulet de cet enfant, qui signifie qu'il se déroulera manière récursive jusqu'à ce que nous n'ayons pas enfants et que nous n'allons tout simplement pas à cette condition. Par exemple, dans notre cas, il y avait Colin à trois reprises. Tout d'abord, pour vous, faites-en un, puis pour ID3, puis pour une valeur par défaut. Et c'est exactement pourquoi nous avons besoin récursion ici. Jetons un coup d'œil à ça. Heure de chargement dans la page. Voyons notre liste imbriquée. Et comme vous pouvez le constater, nous avons maintenant des enfants. Et à l'intérieur de l'article 1, nous n'avons qu'un enfant avec ad3, et nous avons également une propriété pour enfants à l'intérieur et nous avons un enfant de plus ici, niveau trois, article quatre, et nous avons des enfants vides car en fait, notre récursion s'est terminée et nous sommes simplement arrivés ici des enfants vides et nous les assignons ici. Une fois encore, tout d'abord, nous devons obtenir tous nos éléments routiers. Deuxièmement, nous devons créer une fonction que nous pouvons appeler récursivement sur n'importe quel élément. Et voici nos enfants. Maintenant, à l'intérieur, les enfants essayaient tout d'abord de trouver tous les enfants de l'article, et deuxièmement, ils portaient du poulet. Si nous devons faire des récursions pour nos enfants, s'il y en a. Si oui, alors nous sommes Colin chez les enfants de façon récursive. Si non, nous faisons simplement assigner un objet et le retour ici à nos enfants. C'est ainsi que vous le faites généralement dans le projet réel. 51. Exercice: Vous avez terminé avec succès mon cours sur la préparation à l'entretien JavaScript. Et je pense que vous êtes génial si vous l'avez terminé ensemble, nous avons implémenté 59 questions d' entretien JavaScript. Et en fait, beaucoup d'entre eux n'ont pas été faciles si vous ne l'avez pas essayé vous-même, mais suivez simplement le prêt. Vous pouvez toujours le faire. Vous pouvez simplement choisir une vidéo au hasard et essayer de l' implémenter vous-même, même si vous l'avez vue une fois, il est très logique d' essayer de le faire. De plus, je voulais simplement vous rappeler de ne pas être déprimé. Si vous échouez à l'entretien, il viendra avec le temps et vous trouverez certainement votre côtelette. Il vous suffit de recueillir plus de connaissances, comprendre la question qui vous est posée lors des entretiens et de mieux vous préparer. J'espère que vous avez beaucoup appris et je vous verrai dans mon prochain cours.