function reverseArrayInPlace(array) {
for (let i = 0; i < Math.floor(array.length / 2); i++) {
let old = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = old;
}
return array;
}
let arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
// → [5, 4, 3, 2, 1]
Estoy trabajando en las estructuras de datos del libro Eloquent JavaScript. En general, entiendo cómo funciona este ciclo, que es cortar la matriz por la mitad y luego comenzar a intercambiar elementos en los lados opuestos. pero aquí mi problema: la primera ronda del ciclo, mi comprensión de "arreglo [i]" es en el índice 0 y "Math.floor(array.length / 2)" está en el índice 1. Entonces, establecemos old = index 0 y luego lo anulamos a "array[array.length - 1 - i]". la pregunta es primero qué significa exactamente -i part y qué índice tiene este "array[array.length - 1 - i]" ubicado en la primera ronda del bucle. por favor que alguien me lo explique soy muy visual y no puedo pasarlo si no veo cada enunciado en accion.
más fácil de entender, y sin el problema de la longitud de arr. impar
function reverseArrayInPlace(arr)
{
for (let i= 0, j= arr.length -1; i < j; i++, j--)
{
// swapp values of arr[i] and arr[j]
[ arr[i], arr[j] ] = [ arr[j], arr[i] ];
}
return arr;
}
let arrayValues = [1, 2, 3, 4, 5];
reverseArrayInPlace( arrayValues );
document.write( JSON.stringify( arrayValues ));
array.length - 1 - i está en la primera ronda array.length - 1 - 0 que es el último elemento de la matriz.
Entonces, el ciclo intercambia el primer y el último elemento, luego incrementa i . A continuación, se redondea el segundo y el valor anterior al último se intercambiará y así sucesivamente.
Array: 1234567890
1st Iteration i=0: ^ ^
2nd Iteration i=1: ^ ^
3rd Iteration i=2: ^ ^
4th Iteration i=3: ^ ^
5th Iteration i=4: ^^
Una matriz tiene índice cero. Es decir, el primer elemento de una matriz está en la posición [0]. Cuando usa array.length , devuelve un total de elementos de matriz que pueden resultar confusos para usted porque una matriz de longitud 5 tendrá su último elemento ubicado en array[4] (porque cero es el primero).
Para cada iteración en su función, usa el contador i para encontrar la posición al final de la matriz que coincide con la iteración.
array.length - 1 - i
La parte -1 se explica arriba. Cuando usa array.length, debe restar 1 para obtener la posición real.