Estoy tratando de resolver un desafío de JavaScript de jshero.net. El desafío es este:

Escriba una función rotar que rote los elementos de una matriz. Todos los elementos deben moverse una posición hacia la izquierda. El elemento 0 debe colocarse al final de la matriz. La matriz girada debe ser devuelta. rotate (['a', 'b', 'c']) debería devolver ['b', 'c', 'a'].

Todo lo que se me ocurrió fue esto:

function rotate(a){
  let myPush = a.push();
  let myShift = a.shift(myPush);
  let myFinalS = [myPush, myShift]
  return myFinalS
}

Pero el mensaje de error que recibí fue:

rotar (['a', 'b', 'c']) no devuelve ['b', 'c', 'a'], sino [3, 'a']. Error de prueba! ¡Corrija el error y vuelva a ejecutar las pruebas!

Siento que me estoy perdiendo algo realmente simple, pero no puedo entender qué. ¿Ustedes tienen otras formas de resolver esto?

2
DefNotBruceWayne 15 jun. 2020 a las 19:08

4 respuestas

La mejor respuesta
function rotate(array){
   let firstElement = array.shift();
   array.push(firstElement);
   return array;
}
3
Zohaib Sohail 15 jun. 2020 a las 16:24

Aquí he creado una utilidad donde, la matriz de entrada no se mutará incluso después de rotar la matriz según el requisito.

function rotate(a){
  let inputCopy = [...a]
  let myShift = inputCopy.shift();
  let myFinalS = [...inputCopy, myShift]
  return myFinalS
}

console.log(rotate([1,2,3]))
console.log(rotate(["a","b","c"]))

Espero que esto ayude.

1
Nithish Gandesiri 15 jun. 2020 a las 16:31

Para lograr el resultado que está buscando, primero debe usar Array.shift() para eliminar el primer elemento, luego usando Array.push() agregue el elemento de nuevo al final de la matriz, luego devuelva la matriz, el problema es que utilizó el orden incorrecto para estos pasos, también El método .push() toma el elemento que se agregará como argumento, aquí hay un fragmento de trabajo:

function rotate(a){
  let myShift = a.shift();
  a.push(myShift);
  return a;
}

console.log(rotate(['a', 'b', 'c']));
1
ROOT 15 jun. 2020 a las 16:26
function rotate(arr){
    let toBeLast = arr[0];
    arr.splice(0, 1);
    arr.push(toBeLast);
    return arr;
}
console.log(rotate(['a', 'b', 'c']));

Nuevo para apilar el desbordamiento. Espero que esto ayude :)

1
tusharkashyap63 15 jun. 2020 a las 16:50