Aqui, escrevi um programa que percorre e inverte a última parte dos elementos do array, como se o array fosse [5, 17, 11, 10, 12, 6]
, e quero uma saída como [5, 17, 11, 6, 12, 10]
, então escrevi um programa, mas a saída não está saindo conforme o esperado. Você pode verificar e modificar isso para que eu obtenha o resultado desejado?
let a = [5, 17, 11, 10, 12, 6];
let n = a.length;
for (let i = 0, j = (n / 2) - 1; i < n / 4; i++, j--) {
let temp = a[n / 2 + i];
a[n / 2 + i] = a[j];
a[j] = temp;
}
for (i = 0; i < n; i++) {
console.log(a[i])
}
Não há necessidade de toda a bobagem extra que você tem para fazer um loop sobre
Array
os elementos - em vez disso,splice()
a matriz original está na metade,reverse()
os valores emendados e, em seguida,push()
todos eles de volta paraa
.Como mencionei em meu comentário - esteja avisado de que isso não funcionará da maneira que você aparentemente deseja if
a.length % 2 != 0
, então você pode considerar usarMath.floor()
no cálculo dea.length / 2
- a aceitabilidade disso dependerá de seus requisitos e restrições.Você pode dividir o array em duas partes e reverter o secondHalf usando o
reverse
método js.Se você não quiser usar,
reverse
você pode seguir esta abordagem:Isso é semelhante a @esqew, mas uma versão que não altera o array original.
E seus comentários sobre nenhum comprimento de array ainda se aplicam aqui.