Cách "phổ biến" nhất để đảo ngược một chuỗi trong JavaScript là đoạn mã sau, khá phổ biến:
function reverseString(str) {
return str.split(' ').reverse().join(' ');
}
reverseString('string'); // "gnirts"
Tuy nhiên, điều này sẽ chỉ hoạt động miễn là chuỗi được đảo ngược không chứa các cặp thay thế. Các ký hiệu linh hồn, tức là các ký tự bên ngoài bình diện đa ngôn ngữ cơ bản, có thể được biểu thị bằng hai đơn vị mã và sẽ dẫn đến kỹ thuật ngây thơ này tạo ra kết quả sai. Hơn nữa, các ký tự có dấu kết hợp (ví dụ: diaeresis) sẽ xuất hiện trên ký tự logic "tiếp theo" thay vì ký tự ban đầu mà nó được kết hợp
'?????.'.split('').reverse().join(''); // fails
Mặc dù phương pháp sẽ hoạt động tốt với hầu hết các ngôn ngữ, nhưng một thuật toán thực sự chính xác, tôn trọng mã hóa để đảo ngược chuỗi có liên quan nhiều hơn một chút. Một trong những cách triển khai như vậy là một thư viện nhỏ có tên Esrever, sử dụng các biểu thức chính quy để so khớp các dấu kết hợp và các cặp thay thế nhằm thực hiện việc đảo ngược một cách hoàn hảo.
Phần |
Giải thích |
Kết quả |
str |
Chuỗi đầu vào |
"string" |
String.prototype.split(deliminator) |
Tách chuỗi str thành một mảng. Tham số "" có nghĩa là phân chia giữa mỗi ký tự. |
["s","t","r","i","n","g"] |
Array.prototype.reverse() |
Trả về mảng từ chuỗi đã tách với các phần tử của nó theo thứ tự ngược lại. |
["g","n","i","r","t","s"] |
Array.prototype.join(deliminator) |
Nối các phần tử trong mảng với nhau thành một chuỗi. Tham số "" có nghĩa là trống dấu phân tách (tức là, các phần tử của mảng được đặt ngay cạnh nhau) |
"gnirts" |
Sử dụng toán tử spread
Phiên bản ≥ 6
function reverseString(str) {
return [...String(str)].reverse().join('');
}
console.log(reverseString('stackoverflow')); // "wolfrevokcats"
console.log(reverseString(1337)); // "7331"
console.log(reverseString([1, 2, 3])); // "3,2,1"
Chức năng reverse() tùy chỉnh
function reverse(string) {
var strRev = " ";
for (var i = string.length - 1 ; i >= 0; i--) {
strRev += string[i] ;
}
return strRev;
}
reverse("zebra"); // "arbez”
Tham khảo GoalKicker.com
Dịch: Devmaster Academy