Cách 1: Split + Reverse + Join (Phổ biến, dễ đọc)
function reverseStr(str) {
return str.split('').reverse().join('');
}
reverseStr("qries"); // "seirq"
Cách 2: Vòng lặp (Hiệu năng tốt, không tạo mảng trung gian)
function reverseStr(str) {
if (!str || typeof str !== 'string') return '';
let reversed = '';
for (let i = str.length - 1; i >= 0; i--) {
reversed += str[i];
}
return reversed;
}
Cách 3: Reduce (Functional)
const reverseStr = str => [...str].reduce((rev, char) => char + rev, '');
Cách 4: Recursion (Đệ quy – không khuyên cho chuỗi dài)
function reverseStr(str) {
return str === '' ? '' : reverseStr(str.substr(1)) + str[0];
}
Lưu ý Unicode (Emoji, surrogate pairs)
"👨👩👧👦".split('').reverse().join('') // Sai (tách code unit)
// Dùng spread (ES6) – đúng grapheme cluster đơn giản
[..."👨👩👧👦"].reverse().join('') // Tốt hơn nhưng vẫn có thể tách ZWJ
// Thư viện: grapheme-splitter, Intl.Segmenter (ES2022)
Ví dụ từ bài gốc (while loop)
function reverseStr(myStr) {
if (!myStr.trim() || typeof myStr !== 'string') return;
let l = myStr.length, s = '';
while (l > 0) {
l--;
s += myStr[l];
}
return s;
}
document.write("Reversed: " + reverseStr("qries")); // "seirq"
Khuyến nghị
- Dùng
split('').reverse().join('') cho code đơn giản, chuỗi ASCII.
- Dùng
for loop cho hiệu năng, chuỗi lớn.
- Chuỗi có emoji/ZWJ → cân nhắc
Intl.Segmenter hoặc thư viện.