Escribí un código para rotar una matriz 1-D por d elementos, pero me pregunto si hay alguna forma más corta de escribir este código. por ejemplo:
arr = [1,2,3,4,5,6,7] , d = 3 newArr = [4,5,6,7,1,2,3] const arrayRotation=(arr,d)=>{ var k = arr.slice(d) var m = new Set(k) var diff = ([...arr].filter(x=>!m.has(x))) return k.concat(diff) }Tuve que usar Set para poder filtrar la diferencia entre 2 matrices. ¿Hay alguna manera mejor (en cuanto a la complejidad) para resolver este problema?
Puede usar slice dos veces y concatenar los subarreglos:
const arr = [1,2,3,4,5,6,7], d = 3; const newArr = [...arr.slice(d % arr.length), ...arr.slice(0, d % arr.length)]; console.log(newArr);Suponiendo que D es positivo, puede usar el índice para mapear idx antiguo => idx nuevo.
const arr = [1,2,3,4,5,6,7] const rot = 3; const newArr = arr.map((el, idx) => arr[(idx+rot)%arr.length]) console.info(newArr); >>> [4,5,6,7,1,2,3]