Maison > interface Web > js tutoriel > Explication détaillée de la façon de supprimer récursivement des éléments dans un tableau en JS

Explication détaillée de la façon de supprimer récursivement des éléments dans un tableau en JS

Y2J
Libérer: 2017-05-20 13:18:35
original
5609 Les gens l'ont consulté

Cet article vous présente principalement plusieurs méthodes de suppression cyclique d'éléments dans un tableau en Javascript. L'article donne des exemples de codes détaillés pour votre référence et votre étude. Il a une certaine valeur de référence et d'apprentissage pour tous les amis qui en ont besoin peuvent suivre. jetez un oeil ensemble.

Découvrez le problème

Lorsque vous codez, vous rencontrez souvent le besoin de supprimer des éléments spécifiés dans une boucle. Selon l'idée conventionnelle, créez simplement une boucle for, puis effectuez un jugement if dans la boucle et supprimez l'élément spécifié dans le jugement. Mais la situation réelle ne se déroule souvent pas aussi bien que prévu.

Ce qui suit utilise un morceau de code Javascript comme exemple pour démontrer ce processus.

(function () {
 var arr = [1,2,2,3,4,5];
 var len = arr.length;
 for(var i=0;i<len;i++){
 //打印数组中的情况,便于跟踪数组中数据的变化
 console.log(i+"="+arr[i]);
 //删除掉所有为2的元素
 if(arr[i]==2){
  arr.splice(i,1);
 }
 }
 console.log(arr);
})();
Copier après la connexion

Les résultats d'exécution sont les suivants :


À partir du résultat final, vous pouvez voir qu'un seul des éléments correspondants est effectivement supprimé. Et un autre élément est toujours là.

Il n'est pas difficile de découvrir à partir du processus en cours d'impression que la raison est que lorsqu'un élément est supprimé, l' index du tableau change, provoquant une exception dans le programme.

Solution

Une fois que vous avez trouvé la cause du problème, il n'est pas difficile de résoudre le problème.

Méthode 1

(function () {
 var arr = [1,2,2,3,4,5];
 var len = arr.length;
 for(var i=0;i<len;i++){
 //打印数组中的情况,便于跟踪数组中数据的变化
 console.log(i+"="+arr[i]);
 //删除掉所有为2的元素
 if(arr[i]==2){
  //注意对比这行代码:删除元素后调整i的值
  arr.splice(i--,1);
 }
 }
 console.log(arr);
})();
Copier après la connexion

Le code ci-dessus semble difficile à comprendre. Existe-t-il un code qui semble plus facile à comprendre ? Veuillez voir ci-dessous

Méthode 2

(function () {
 var arr = [1,2,2,3,4,5];
 var len = arr.length-1;
 //start from the top
 for(var i=len;i>=0;i--){
 console.log(i+"="+arr[i]);
 if(arr[i]==2){
  arr.splice(i,1);
 }
 }
 console.log(arr);
})();
Copier après la connexion

Le déplacement d'arrière en avant peut résoudre efficacement le problème et est facile à comprendre. Existe-t-il donc une mise en œuvre plus simple ? Ensuite, regardez le code suivant

Méthode 3

(function () {
 var arr = [1,2,2,3,4,5];
 var i = arr.length;
 while(i--){
 console.log(i+"="+arr[i]);
 if(arr[i]==2){
  arr.splice(i,1);
 }
 }
 console.log(arr);
})();
Copier après la connexion

Utilisez while(i--) , i est l'indice du tableau, je pense personnellement que c'est le plus concis et le plus efficace. mise en œuvre du code.

Résumé

[Recommandations associées]

1 Tutoriel vidéo gratuit Javascript

2. Explication détaillée d'un exemple de JS remplissant la fonction de notation par étoiles

3 Comment JS détermine-t-il si un texte est en pleine largeur ou en demi-largeur ?

4. nodejs+websocket complète une fonction de système de discussion

5.Js termine l'effet de décalage horaire du compte à rebours

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

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal