Avec les méthodes d'objets Array, vous pouvez encore modifier le contenu du tableau par rapport aux boucles de base pour, ces méthodes manquent d'une fonctionnalité importante. Vous ne pouvez pas modifier l'index lors de l'exécution.
Par exemple, si vous supprimez l'élément actuel et le placez à une autre position d'index dans le même tableau, vous pouvez facilement le faire. Si vous déplacez l'élément actuel vers une position précédente, il n'y a aucun problème dans la prochaine itération, vous obtiendrez le même élément suivant que si vous n'aviez rien fait.
Considérez ce code où nous déplaçons l'élément à la position d'index 5 à la position d'index 2 une fois que l'index compte jusqu'à 5.
var ar = [0,1,2,3,4,5,6,7,8,9];
ar.forEach((e,i,a) => {
i == 5 && a.splice(2,0,a.splice(i,1)[0])
console.log(i,e);
}); // 0 0 - 1 1 - 2 2 - 3 3 - 4 4 - 5 5 - 6 6 - 7 7 - 8 8 - 9 9
Cependant, si nous déplaçons l'élément actuel quelque part au-delà de la position d'index actuelle, les choses deviennent un peu compliquées. Ensuite, l'élément très suivant se déplacera dans la position des éléments déplacés et dans la prochaine itération, nous ne serons pas en mesure de le voir ou de l'évaluer.
Considérez ce code où nous déplaçons l'élément à la position d'index 5 à la position d'index 7 une fois que l'index compte jusqu'à 5.
var a = [0,1,2,3,4,5,6,7,8,9];
a.forEach((e,i,a) => {
i == 5 && a.splice(7,0,a.splice(i,1)[0])
console.log(i,e);
}); // 0 0 - 1 1 - 2 2 - 3 3 - 4 4 - 5 5 - 6 7 - 7 5 - 8 8 - 9 9
Nous n'avons donc jamais rencontré 6 dans la boucle. Normalement, dans une boucle for, vous devez diminuer la valeur d'index lorsque vous déplacez l'élément de tableau vers l'avant afin que votre index reste à la même position lors de la prochaine exécution et que vous puissiez toujours évaluer l'élément déplacé à la place de l'élément supprimé. Cela n'est pas possible avec les méthodes de tableau. Vous ne pouvez pas modifier l'index. Vérifiez le code suivant
var a = [0,1,2,3,4,5,6,7,8,9];
a.forEach((e,i,a) => {
i == 5 && (a.splice(7,0,a.splice(i,1)[0]), i--);
console.log(i,e);
}); // 0 0 - 1 1 - 2 2 - 3 3 - 4 4 - 4 5 - 6 7 - 7 5 - 8 8 - 9 9
Comme vous le voyez quand on décrémente i
cela ne continuera pas de 5 mais 6, d'où il était parti.
Gardez cela à l'esprit.