Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Cách đảo ngược chuỗi (reverse string) trong JavaScript

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.