Mảng lưu danh sách, đối tượng lưu dữ liệu có cấu trúc. Hai kiểu này xuất hiện ở mọi ứng dụng JavaScript.
- Thao tác mảng: thêm, xóa, tìm
- Dùng map, filter, reduce
- Tạo và truy cập đối tượng
- Dùng destructuring và JSON
- Mảng (array)
- Danh sách có thứ tự, chỉ số từ 0.
- Đối tượng (object)
- Tập các cặp thuộc tính: giá trị.
- Destructuring
- Tách giá trị ra biến nhanh:
const {ten} = sv. - JSON
- Định dạng văn bản mô tả dữ liệu, dùng trao đổi giữa web và máy chủ.
Khái niệm và lý thuyết
Mảng và đối tượng là hai cấu trúc dữ liệu chính. Cả hai là kiểu tham chiếu: biến chứa "địa chỉ" của dữ liệu chứ không chứa chính dữ liệu. Vì vậy b = a không tạo bản sao mà hai biến cùng trỏ một mảng; muốn sao chép dùng [...a] hoặc {...a} (sao chép nông) hoặc structuredClone (sao chép sâu).
Các phương thức map, filter, reduce theo phong cách hàm thuần: không sửa mảng gốc mà trả về giá trị mới, giúp mã dễ dự đoán và dễ kiểm tra. Tư duy: filter chọn, map biến đổi, reduce gộp.
JSON là định dạng văn bản mô tả đối tượng và mảng, gần giống cú pháp JavaScript nhưng bắt buộc khóa trong nháy kép và không chứa hàm. Nó là chuẩn trao đổi dữ liệu giữa trình duyệt và máy chủ.
Mảng
const ds = ["táo", "cam"];
ds.push("xoài"); // thêm cuối
ds.unshift("nho"); // thêm đầu
ds.pop(); // bỏ cuối
console.log(ds.length, ds.includes("cam"), ds.indexOf("cam"));map, filter, reduce
const gia = [120, 340, 90, 560];
const giamGia = gia.map(g => g * 0.9);
const reRe = gia.filter(g => g < 200);
const tong = gia.reduce((s, g) => s + g, 0);
const dauTien = gia.find(g => g > 300);
console.log(giamGia, reRe, tong, dauTien);map biến đổi từng phần tử, filter giữ phần tử thỏa điều kiện, reduce gộp thành một giá trị.
Ví dụ: lọc và tính tổng giỏ hàng
const gio = [
{ ten: "Sách", gia: 80000 },
{ ten: "Bút", gia: 15000 },
{ ten: "Vở", gia: 25000 }
];
const dat = gio.filter(x => x.gia >= 20000);
const tong = gio.reduce((s, x) => s + x.gia, 0);
const ten = gio.map(x => x.ten);
console.log(dat, tong, ten);filter giữ lại phần tử thỏa điều kiện, map biến mỗi phần tử thành giá trị khác, reduce gom cả mảng thành một giá trị. Ba hàm này thay cho phần lớn vòng lặp bạn từng viết bằng tay.
Đối tượng
const sv = { ten: "Lan", tuoi: 20, diem: [8, 9] };
console.log(sv.ten, sv["tuoi"]);
sv.lop = "K66";
delete sv.tuoi;
const { ten, diem } = sv;
for (const k in sv) console.log(k, sv[k]);JSON
const chuoi = JSON.stringify({ a: 1, b: [2, 3] });
const obj = JSON.parse(chuoi);
console.log(chuoi, obj.b[1]);Giỏ hàng là mảng đối tượng; tính tổng tiền bằng reduce:
const gio = [
{ ten: "Áo", gia: 200000, sl: 2 },
{ ten: "Mũ", gia: 80000, sl: 1 }
];
const tong = gio.reduce((s, m) => s + m.gia * m.sl, 0);
console.log(tong); // 480000Sao chép đối tượng: {...goc}. Sao chép sâu: structuredClone(goc).
Gán b = a cho mảng/đối tượng chỉ chia sẻ cùng một vùng dữ liệu; sửa b là sửa luôn a.
- Cho mảng điểm, tính trung bình và điểm cao nhất.
- Lọc sản phẩm có giá dưới 100k và sắp xếp tăng dần.
- Chuyển mảng đối tượng sinh viên thành chuỗi JSON.
- Mảng: push, pop, includes, map, filter, reduce.
- Đối tượng: truy cập bằng dấu chấm hoặc ngoặc vuông.
- JSON.stringify và JSON.parse chuyển đổi qua lại.