Вы можете использовать .slice
, чтобы извлечь два массива из массива - один, начинающийся с начала, заканчивающийся в середине, а другой, начинающийся в середине и заканчивающийся в конце. Затем просто объедините их в обратном порядке:
const rotate = (nums, k) => [...nums.slice(-k), ...nums.slice(0, -k)];
console.log(rotate([1,2,3,4,5,6,7], 1));
console.log(rotate([1,2,3,4,5,6,7], 3));
Если у вас есть для изменения существующего массива, то:
const rotate = (nums, k) => {
const moveAfter = new Array(k).concat(nums.slice(0, -k));
Object.assign(nums, nums.slice(-k), moveAfter);
return nums;
};
console.log(rotate([1,2,3,4,5,6,7], 1));
console.log(rotate([1,2,3,4,5,6,7], 3));
Если k
может быть больше, чем длина массива, сначала используйте модуль по нему:
const rotate = (nums, kPossiblyOutOfRange) => {
const k = kPossiblyOutOfRange % nums.length;
return [...nums.slice(-k), ...nums.slice(0, -k)];
}
console.log(rotate([1,2,3,4,5,6,7], 1));
console.log(rotate([1,2,3,4,5,6,7], 8));
console.log(rotate([1,2,3,4,5,6,7], 3));