Maison > Questions et réponses > le corps du texte
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)) // 也只会有三个结果
某草草2017-07-05 10:52:19
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 :
'0' in a // true,索引存在.
'1' in a // true
'2' in a // false,索引不存在
'9' in a // true
Et forEach
ne traversera que les éléments où l'index d'origine existe.
过去多啦不再A梦2017-07-05 10:52:19
Y a-t-il une différence entre l'indéfini généré automatiquement ici et celui que j'ai défini ?
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
console.log(Array.from(a))
淡淡烟草味2017-07-05 10:52:19
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
漂亮男人2017-07-05 10:52:19
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