Cree una función llamada "rotar" que tome una matriz y devuelva una nueva con los elementos dentro de n espacios rotados.
Si n es mayor que 0, debe rotar la matriz hacia la derecha. Si n es menor que 0, debe rotar la matriz hacia la izquierda. Si n es 0, entonces debería devolver la matriz sin cambios.
Ejemplo:
var data = [1, 2, 3, 4, 5]; rotate(data, 1) // => [5, 1, 2, 3, 4] rotate(data, 2) // => [4, 5, 1, 2, 3] rotate(data, 3) // => [3, 4, 5, 1, 2] rotate(data, 4) // => [2, 3, 4, 5, 1] rotate(data, 5) // => [1, 2, 3, 4, 5] rotate(data, 0) // => [1, 2, 3, 4, 5] rotate(data, -1) // => [2, 3, 4, 5, 1] rotate(data, -2) // => [3, 4, 5, 1, 2] rotate(data, -3) // => [4, 5, 1, 2, 3] rotate(data, -4) // => [5, 1, 2, 3, 4] rotate(data, -5) // => [1, 2, 3, 4, 5]Además, el método debe tomar CUALQUIER matriz de objetos y realizar esta operación en ellos:
rotate(['a', 'b', 'c'], 1) // => ['c', 'a', 'b'] rotate([1.0, 2.0, 3.0], 1) // => [3.0, 1.0, 2.0] rotate([true, true, false], 1) // => [false, true, true]Finalmente, la rotación no debería estar limitada por los índices disponibles en la matriz. Lo que significa que si excedemos los índices de la matriz, sigue girando.
Ejemplo:
var data = [1, 2, 3, 4, 5] rotate(data, 7) // => [4, 5, 1, 2, 3] rotate(data, 11) // => [5, 1, 2, 3, 4] rotate(data, 12478) // => [3, 4, 5, 1, 2]Básicamente, podría hacer esto con un ciclo while e increment o decrement según el parámetro numérico, si es positivo o negativo.
function rotate(data, n) { const output = [...data] if (n === 0) { return data } const neg = n < 0 const last = output.length - 1 const toIndex = neg ? last : 0 const index = neg ? 0 : last while ((neg ? n++ : n--) !== 0) { output.splice(toIndex, 0, output.splice(index, 1)[0]) } return output } var data = [1, 2, 3, 4, 5]; console.log(rotate(data, 2)) // => [4, 5, 1, 2, 3] console.log(rotate(data, 3)) // => [3, 4, 5, 1, 2] console.log(rotate(data, 4)) // => [2, 3, 4, 5, 1] console.log(rotate(data, 5)) // => [1, 2, 3, 4, 5] console.log(rotate(data, -1)) // => [2, 3, 4, 5, 1] console.log(rotate(data, -2)) // => [3, 4, 5, 1, 2] console.log(rotate(data, -3)) // => [4, 5, 1, 2, 3] console.log(rotate(data, -4)) // => [5, 1, 2, 3, 4] console.log(rotate(data, -5)) // => [1, 2, 3, 4, 5] console.log(rotate(['a', 'b', 'c'], 1)) console.log(rotate([true, true, false], 1))function rotate(array,n){ let len = array.length; n=Math.abs(n)>len?n%len:n if(n>0){ let firstPart=array.slice(len-n,len); let lastPart=array.slice(0,len-n); console.log(firstPart,lastPart) return [...firstPart,...lastPart] }else{ let firstPart=array.slice(0,n); let lastPart=array.slice(n,len); console.log(firstPart,lastPart) return [...lastPart,...firstPart] } } console.log(rotate([1, 2, 3, 4, 5],1));Este código pasa casi todas las pruebas, pero algunas pruebas no se pueden pasar. Entonces, ¿alguien puede ayudarme con esto?