Yêu cầu: Viết hàm JavaScript nhận vào một chuỗi và hoán đổi vị trí các từ liền kề (từ 1 ↔ từ 2, từ 3 ↔ từ 4, ...).
Ví dụ
Chuỗi đầu vào:
const str = "This is a sample string only";
Kết quả mong đợi:
"is This sample a only string"
Triển khai
const str = "This is a sample string only";
const replaceWords = str => {
return str.split(" ").reduce((acc, val, ind, arr) => {
if (ind % 2 === 1) {
return acc; // Bỏ qua index lẻ (đã xử lý ở index chẵn trước đó)
}
// Ghép: từ tiếp theo + " " + từ hiện tại + " "
acc += ((arr[ind + 1] || "") + " " + val + " ");
return acc;
}, "").trim(); // trim() để xóa khoảng trắng thừa cuối chuỗi
};
console.log(replaceWords(str));
Kết quả
is This sample a only string
Giải thích logic:
- Tách chuỗi thành mảng từ bằng
split(" "). - Duyệt qua mảng, ở các index chẵn (0, 2, 4...), lấy cặp
[current, next]và ghép theo thứ tự ngược. - Index lẻ (1, 3, 5...) bị bỏ qua vì đã được xử lý trong cặp trước.
- Cuối cùng dùng
trim()để loại bỏ khoảng trắng thừa.
Cách viết ngắn gọn hơn (ES6):
const swapAdjacentWords = str =>
str.split(" ")
.map((word, i, arr) => i % 2 === 0 ? arr[i + 1] : arr[i - 1])
.filter(Boolean)
.join(" ");
console.log(swapAdjacentWords(str));