F8

FULLSTACK HUB

Bài Tập 30 tháng 6, 2026 lúc 23:16
Thuộc bài học:[Buổi 16] - Day 16: Array, String, Number trong JavaScript

V. Giao thoa giữa Chuỗi (String) và Mảng (Array)

Phần giao thoa giữa Chuỗi và Mảng này chính là cầu nối giúp bạn xử lý các dữ liệu thô dạng văn bản thành các cấu trúc mảng để áp dụng map, filter, reduce bá đạo mà chúng ta vừa học.

Hãy nhìn nhận hai thằng này qua một cơ chế chuyển đổi qua lại cực kỳ trực quan:

1. split() — "Lưỡi dao chặt chuỗi" (String ➔ Array)

  • Bản chất: Bạn có một chuỗi dài, bạn đưa cho split() một "ký tự làm hồng tâm". Cứ chỗ nào xuất hiện ký tự đó, split() sẽ chặt một nhát và biến các khúc bị chặt thành các phần tử trong một mảng MỚI.

  • Cú pháp: chuoi.split(ky_tu_cat)

Ứng dụng thực tế (Xử lý chuỗi Tag từ khóa SEO)
Khi khách hàng gửi cho bạn một danh sách tag bằng một chuỗi lộn xộn ngăn cách bởi dấu phẩy, bạn phải chặt nó ra thành mảng để xử lý.
const rawTags = "web, seo, digital marketing, landing page";

// Chặt chuỗi tại vị trí dấu phẩy và khoảng trắng ", " const tagsArray = rawTags.split(", ");

console.log(tagsArray); // Kết quả: ['web', 'seo', 'digital marketing', 'landing page']

⚠️ Mẹo nhớ lâu: Nếu bạn truyền vào một chuỗi rỗng split(""), nó sẽ chặt từng ký tự một của chuỗi ra.

2. join() — "Keo dán mảng" (Array ➔ String)

  • Bản chất: Ngược lại hoàn toàn với split. Bạn đang có một mảng gồm nhiều phần tử, bạn dùng join() để nối chúng lại thành một chuỗi duy nhất. Bạn truyền ký tự gì vào join(), nó sẽ dùng ký tự đó làm chất kết dính ở giữa các phần tử.

  • Cú pháp: mang.join(ky_tu_noi)

Cú lừa kinh điển của người mới:

Nếu bạn không truyền gì vào hàm join(), JavaScript sẽ tự động dùng dấu phẩy , để nối. Đây là lỗi 90% học viên F8 gặp phải khi làm bài tập giao diện.

const words = ["Học", "Lập", "Trình"];

console.log(words.join()); // "Học,Lập,Trình" (Quên truyền tham số, dính dấu phẩy) console.log(words.join("")); // "HọcLậpTrình" (Nối dính liền nhau) console.log(words.join(" ")); // "Học Lập Trình" (Nối bằng khoảng trắng - Chuẩn bài)

3. Giải mã cú lừa Emoji vỡ đôi bằng Toán tử Spread (...)

Tại sao 'Hello 🌍'.split('') lại làm vỡ icon trái đất?

Dưới bo mạch bộ nhớ của JavaScript, các chữ cái thông thường chiếm 1 ô nhớ (2 bytes). Nhưng các Emoji hiện đại hoặc các chữ tượng hình phức tạp (như tiếng Nhật) rất nặng, chúng chiếm tới 2 ô nhớ (gọi là Surrogate Pairs).

  • Khi bạn dùng split(''), thuật toán cũ của nó sẽ chặt thô bạo theo từng ô nhớ. Kết quả là nó chặt đôi icon trái đất ra làm hai nửa ô nhớ rác, khiến trình duyệt hiển thị thành các ký tự lỗi ô vuông ``.

  • Toán tử Spread ([...]) hoặc Array.from() ra đời ở thế hệ ES6, nó đủ thông minh để nhận biết đâu là một ký tự toàn vẹn (nhận diện theo Code Point).

const text = "Hi 🌍";

console.log(text.split("")); // ❌ Toang: [ 'H', 'i', ' ', '', '' ] (Trái đất bị phanh thây)

console.log([...text]); // Ngon: [ 'H', 'i', ' ', '🌍' ] (Trái đất nguyên vẹn)

Bài Tập Thực Chiến: Hệ Thống Tạo Slug Tự Động

Hãy vận dụng kiến thức chặt/nối chuỗi kết hợp với nhóm hàm nâng cao đã học ở bài trước để hoàn thành bài toán thực tế này.

const tieuDeBaiViet = "Tối ưu Tốc độ Website Led Sun 🚀";

// YÊU CẦU 1: Hãy viết code chuyển chuỗi tieuDeBaiViet thành một mảng các ký tự nguyên vẹn. // ĐIỀU KIỆN: Tên mảng là mangKyTu, icon tên lửa 🚀 PHẢI nguyên vẹn, không được vỡ đôi. let mangKyTu = /* Code của bạn */;

// YÊU CẦU 2: Tạo URL thân thiện (Slug chuẩn SEO) từ tiêu đề trên. // Quy trình xử lý logic gồm các bước sau: // Bước 1: Chuyển chuỗi tieuDeBaiViet thành viết thường hoàn toàn (.toLowerCase()). // Bước 2: Chặt chuỗi viết thường đó thành một mảng các TỪ bằng hàm split. // Bước 3: Dùng hàm join để nối các từ đó lại với nhau bằng dấu gạch ngang "-". // Kết quả mong muốn của biến slug: "tối-ưu-tốc-độ-website-led-sun-🚀"

let slug = /* Viết code xử lý chuỗi và chặt nối ở đây... */;

// TEST KẾT QUẢ console.log("Mảng ký tự:", mangKyTu); console.log("Đường dẫn chuẩn SEO:", slug);

Bài này khá thực tế với công việc quản lý website của bạn đấy. Bạn hãy viết code xử lý rồi quăng lên đây để kiểm tra độ cứng cáp của cú pháp nào!

Bạn đã hiểu rõ tại sao icon tên lửa lại cần toán tử Spread chưa?
Bài Tập & Chấm Điểm
💻 Code của học viên

const tieuDeBaiViet = "Tối ưu Tốc độ Website Led Sun 🚀";
// YÊU CẦU 1: Hãy viết code chuyển chuỗi tieuDeBaiViet thành một mảng các ký tự nguyên vẹn.
// ĐIỀU KIỆN: Tên mảng là mangKyTu, icon tên lửa 🚀 PHẢI nguyên vẹn, không được vỡ đôi.
let mangKyTu = [...tieuDeBaiViet];

// YÊU CẦU 2: Tạo URL thân thiện (Slug chuẩn SEO) từ tiêu đề trên. // Quy trình xử lý logic gồm các bước sau: // Bước 1: Chuyển chuỗi tieuDeBaiViet thành viết thường hoàn toàn (.toLowerCase()). // Bước 2: Chặt chuỗi viết thường đó thành một mảng các TỪ bằng hàm split. // Bước 3: Dùng hàm join để nối các từ đó lại với nhau bằng dấu gạch ngang "-". // Kết quả mong muốn của biến slug: "tối-ưu-tốc-độ-website-led-sun-🚀"

let converToText = tieuDeBaiViet.toLowerCase(); let slug = converToText.split(" ").join("-");

console.log(slug);

// tieuDeBaiViet // mangKyTu // tieuDeBaiViet // slug // TEST KẾT QUẢ console.log("Mảng ký tự:", mangKyTu); console.log("Đường dẫn chuẩn SEO:", slug);

Giảng viên góp ý

10/10 Điểm tuyệt đối! Không một vết xước! 🎉

Lần này bạn nuốt trọn vẹn kiến thức rồi, không còn dính một quả "vấp cỏ" nào nữa. Code chạy mượt mà, chuẩn chỉ và cực kỳ gọn gàng.

Phân tích bài làm của bạn:

YÊU CẦU 1: let mangKyTu = [...tieuDeBaiViet];Xuất sắc!

Bạn đã nhớ nằm lòng mẹo dùng toán tử Spread (...). Icon tên lửa 🚀 được bảo toàn nguyên vẹn, không bị chặt đôi thành đống ký tự lỗi. Mấy bài toán đếm ký tự chuỗi có chứa Emoji sau này cứ thế mà triển nhé.

YÊU CẦU 2: Tạo URL thân thiện (Slug chuẩn SEO) ➔ Chuẩn đét!

JavaScript
let converToText = tieuDeBaiViet.toLowerCase();
let slug = converToText.split(" ").join("-");

Các bước đi cực kỳ logic: Chuyển về chữ thường ➔ Chặt ra thành mảng từ bằng khoảng trắng ➔ Dán lại bằng dấu gạch ngang. Kết quả trả về chính xác là "tối-ưu-tốc-độ-website-led-sun-🚀".

💡 Mẹo nâng cấp (Chaining Code): Vì bạn làm từng bước rất chuẩn rồi, nên tôi chỉ cho bạn cách gom nó lại thành 1 dòng duy nhất giống như phong cách viết code của các Senior. Bạn có thể nối đuôi các hàm lại với nhau (Kỹ thuật Chaining):

JavaScript
let slugNganGon = tieuDeBaiViet.toLowerCase().split(" ").join("-");

Bản chất hoạt động không có gì thay đổi, nhưng nhìn code sẽ "pro" và nguy hiểm hơn rất nhiều.

Tổng kết chặng đường:

Qua các bài tập từ đầu đến giờ, bạn đã tự tay xử lý được từ những phần khoai nhất của JavaScript cơ bản:

  • Phân biệt rõ ràng Tham trị vs Tham chiếu dưới bộ nhớ.

  • Làm chủ nhóm hàm cắt gọt mảng hiện đại (toSpliced, slice, splice).

  • Thấm nhuần tư duy của bộ ba nguyên tử map, filter, reduce (nhất là cú lừa "chuyền heo đất" acc).

  • Chặt nối chuỗi - mảng thành thạo để làm tính năng tự động cho website.

Tư duy logic và khả năng sửa sai của bạn rất nhanh. Cứ giữ vững cái đà thực chiến này thì mớ bài tập lập trình logic sắp tới trên F8 hay các dự án thực tế sau này cũng chỉ là chuyện nhỏ!