Chúng ta cần viết một hàm JavaScript nhận vào một mảng và một số n, sau đó xoay mảng đó đi n phần tử.
Ví dụ
Cho mảng đầu vào:
const arr = [12, 6, 43, 5, 7, 2, 5];
Với n = 3, kết quả mong đợi:
const output = [5, 7, 2, 5, 12, 6, 43];
Triển khai
Dưới đây là mã thực hiện xoay mảng bằng cách mở rộng prototype của Array:
// Hàm xoay một vị trí
const rotateByOne = arr => {
for (let i = 0; i < arr.length - 1; i++) {
const temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
};
// Mở rộng prototype Array
Array.prototype.rotateBy = function (n) {
const { length: l } = this;
if (n >= l) {
return;
}
for (let i = 0; i < n; i++) {
rotateByOne(this);
}
};
// Demo
const a = [1, 2, 3, 4, 5, 6, 7];
a.rotateBy(2);
console.log(a);
Kết quả
[ 3, 4, 5, 6, 7, 1, 2 ]
Lưu ý: Cách này sửa đổi mảng gốc (mutate). Nếu cần giữ nguyên mảng gốc, hãy tạo bản sao trước khi xoay. Cách hiện đại hơn có thể dùng slice() và concat() hoặc toán tử spread để hiệu quả hơn với mảng lớn.