Chuỗi (String) trong JavaScript là bất biến (immutable) — không thể sửa trực tiếp ký tự tại index. Phải tạo chuỗi mới.
Cách 1: substring + concat (cách gốc)
<!DOCTYPE html>
<html>
<body>
<script>
var str = "cric";
document.write("Gốc: " + str + "<br>"); // "cric"
var index = 3;
// Lấy phần trước index + ký tự mới + phần sau index+1
str = str.substring(0, index) + 'x' + str.substring(index + 1);
document.write("Mới: " + str); // "crix"
</script>
</body>
</html>
Cách 2: split → sửa → join (dễ đọc)
function replaceAt(str, index, char) {
const arr = str.split('');
arr[index] = char;
return arr.join('');
}
replaceAt("cric", 3, 'x'); // "crix"
Cách 3: slice (hiệu năng tốt hơn substring)
function replaceAt(str, index, char) {
return str.slice(0, index) + char + str.slice(index + 1);
}
Cách 4: Array.from + join (hỗ trợ Unicode tốt)
function replaceAt(str, index, char) {
return Array.from(str).map((c, i) => i === index ? char : c).join('');
}
So sánh:
| Cách | Ưu điểm | Nhược điểm |
|---|---|---|
| slice + concat | Nhanh, ít bộ nhớ | Khó đọc chút |
| split/join | Dễ hiểu | Tạo mảng trung gian |
| Array.from | Hỗ trợ Unicode (emoji, surrogate pairs) | Chậm hơn |
Lưu ý:
- Index ngoài phạm vi:
slicean toàn (trả về ""),splitkhông lỗi nhưng không thay đổi. - String immutable — luôn trả về chuỗi mới.
- Để thay thế tất cả:
str.split(old).join(new)hoặcstr.replaceAll(old, new)(ES2021).