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.