La description du problème n'est pas exhaustive
Mon problème est lorsque mon tableau est défini comme suit :
let a = [undefined, undefined]
a[9] = 1
console.log(a) //[undefined, undefined, undefined × 7, 1]
Y a-t-il une différence entre l'indéfini généré automatiquement ici et celui que j'ai défini
?Pourquoi ne puis-je pas les parcourir lorsque j'utilise la traversée intégrée ?
a.forEach(it => console.log(it)) // 也只会有三个结果
Parce que ce que vous définissez est un tableau clairsemé (tableau clairsemé, la longueur du tableau est supérieure au nombre d'éléments du tableau, vous pouvez utiliser
).in
pour détecter si ses éléments du tableau existent :Et
forEach
ne traversera que les éléments où l'index d'origine existe.C'est un piège des tableaux, cet indéfini n'est pas si indéfini que ça. Ceux générés automatiquement sont appelés "emplacements vides", et Chrome les affiche simplement comme non définis. Vous pouvez également voir que le véritable indéfini est affiché un par un et que les emplacements vides affichent les mots « indéfini × 7 ».
forEach, la carte et autres ignoreront les emplacements vides. Veuillez vous référer à la solution
Parce que forEach est écrit comme ceci, le forEach intégré continuera lorsqu'il rencontrera undefined
Vous pouvez écrire vous-même une version non sautée
Vous pouvez considérer ce problème sous un autre angle :
var a = [1,2,3,4]
delete a[0]
console.log(a)//[undefined × 1, 2, 3, 4]
a.length//4
a.forEach(it=>console.log(it))// 2 3 4
Retour à la question, lorsque forEach est encapsulé, ce "indéfini" sera ignoré, vous pouvez réécrire Essayez cette méthode, quelle que soit la valeur, elle devrait pouvoir être imprimée normalement