Maison >interface Web >js tutoriel >Compétences code_javascript d'implémentation de traversée d'ordre inverse JS

Compétences code_javascript d'implémentation de traversée d'ordre inverse JS

WBOY
WBOYoriginal
2016-05-16 16:29:351691parcourir

La méthode de parcours la plus couramment utilisée est l'instruction for (il existe également des méthodes récursives et while). Lorsque nous parcourons un tableau, nous faisons généralement ceci :

Copier le code Le code est le suivant :

vararr = [1,2,3,4,5,6,7,8,9,10];
pour(var i=0,total=arr.length;i console.log(i,arr[i]);
>

Il s'agit de la méthode de traversée la plus couramment utilisée : la traversée vers l'avant. Cela va du premier élément au dernier élément du tableau.

Alors pourquoi le drame d’aujourd’hui mentionne-t-il également la traversée en ordre inverse ?

Ici, je dois mentionner l'un des modules les plus couramment utilisés parmi les composants écrits dans les petits drames : les événements. Utilisé pour créer des modèles d'événements personnalisés, gérer la surveillance et le déclenchement des événements, le mode de publication et d'abonnement (pub/sub) le plus simple. Parce qu'il a été récemment découvert qu'il existe un risque caché de débordement de mémoire, il est nécessaire d'ajouter une méthode de déliaison sur la base d'origine.

Étant donné que les fonctions de rappel avec le même nom d'événement sont placées dans le même tableau, pour dissocier, il vous suffit de trouver la fonction de rappel correspondante dans le tableau (la même fonction de rappel peut être liée plusieurs fois) et de la supprimer.

C'est une exigence très simple, il est donc naturel d'écrire du code similaire à celui-ci :

Copier le code Le code est le suivant :

//Supprimer 2
du tableau vararr = [1,2,2,2,2,1,1,2,2];
pour(var i=0,total=arr.length;i si(arr[i] == 2){
//Remplissez les conditions, supprimez
arr.splice(i,1);
>
>
console.log(arr);

Existe-t-il un code normal, mais le résultat final est : [1, 2, 2, 1, 1, 2]. De toute évidence, le résultat de l'exécution n'est pas celui attendu.

Quel est le problème ?

Après une analyse minutieuse, j'ai découvert que le problème réside dans le fait que chaque fois que la correspondance est réussie, une fois l'opération de suppression effectuée, l'élément suivant à vérifier sera ignoré, car chaque élément suivant du tableau avance d'un .

J'ai trouvé le problème, modifié le code et ajusté l'index de séquence (i) après avoir effectué l'opération de suppression.

Copier le code Le code est le suivant :

//Supprimer 2
du tableau vararr = [1,2,2,2,2,1,1,2,2];
pour(var i=0,total=arr.length;i si(arr[i] == 2){
//Remplissez les conditions, supprimez
arr.splice(i,1);
//Ajuster l'index de la séquence
je = i-1;
>
>
console.log(arr);

Le problème est résolu, mais j'ai toujours l'impression que modifier l'index de séquence est une allumette de la boucle for. Puis j’ai eu un éclair d’inspiration, bang bang bang, et j’ai tapé le code suivant :

Copier le code Le code est le suivant :

//Supprimer 2
du tableau vararr = [1,2,2,2,2,1,1,2,2];
pour(var je = arr.length-1;i!=-1;i--){
si(arr[i] == 2){
//Remplissez les conditions, supprimez
arr.splice(i,1);
>
>
console.log(arr);

Le processus de parcours reste inchangé, le seul changement est que l'ordre de parcours a changé, et en passant, il y a un total variable de moins.

D'accord, j'avoue que ce que j'ai écrit aujourd'hui est très idiot, mais à travers cet exemple, je vous le rappellerai lors de l'écriture de code à l'avenir Lors du processus de parcours, s'il s'agit de modifier le tableau lui-même (ajout et suppression), La traversée inversée est une comparaison d'un moyen sûr de traverser.

Codage des notes, laissez-les rire de vous plus tard !

Veuillez indiquer la source lors de la réimpression : http://bh-lay.com/blog/148c07761fa

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