Com os métodos de objeto Array, você pode modificar o conteúdo da matriz e, em comparação com o básico para loops, esses métodos não possuem uma funcionalidade importante. Você não pode modificar o índice em execução.
Por exemplo, se você remover o elemento atual e colocá-lo em outra posição de índice na mesma matriz, poderá fazê-lo facilmente. Se você mover o elemento atual para uma posição anterior, não haverá problema na próxima iteração, o próximo item será o mesmo, como se você não tivesse feito nada.
Considere esse código em que movemos o item na posição 5 do índice para a posição 2 quando o índice conta até 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
No entanto, se movermos o elemento atual para algum lugar além da posição atual do índice, as coisas ficam um pouco confusas. Em seguida, o item seguinte mudará para a posição de itens movidos e, na próxima iteração, não poderemos vê-lo ou avaliá-lo.
Considere este código em que movemos o item na posição 5 do índice para a posição 7, depois que o índice conta até 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
Portanto, nunca encontramos 6 no circuito. Normalmente, em um loop for, é esperado que você diminua o valor do índice ao mover o item da matriz para frente, para que o índice permaneça na mesma posição na próxima execução e você ainda possa avaliar o item deslocado para o lugar do item removido. Isso não é possível com métodos de matriz. Você não pode alterar o índice. Verifique o seguinte código
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
Como você vê quando diminuímos, i
ele não continuará de 5, mas 6, de onde foi deixado.
Portanto, mantenha isso em mente.