Sao chép nông và sâu
Thuộc phần Logic và luồng chương trình trong hành trình JavaScript của Coddy. Bài học 25 trên 65.
Khi sao chép đối tượng, ta có hai kiểu sao chép:
- Sao chép nông: chỉ sao chép cấp đầu tiên
- Sao chép sâu: sao chép tất cả các cấp lồng nhau
Các phương thức sao chép nông:
Dùng toán tử spread:
const original = { a: 1, b: { x: 2 } };
const spreadCopy = { ...original };Dùng Object.assign() để tạo đối tượng mới bằng cách sao chép các thuộc tính từ đối tượng nguồn sang đối tượng đích:
const assignCopy = Object.assign({}, original);Vấn đề với bản sao nông:
original.b.x = 3;
console.log(spreadCopy.b.x); // 3
// (các đối tượng lồng nhau dùng chung tham chiếu)
console.log(assignCopy.b.x); // 3Tìm hiểu về phương thức JSON và sao chép sâu
JSON.stringify() chuyển đổi một đối tượng JavaScript thành chuỗi JSON:
const obj = { name: "John", age: 30 };
const jsonString = JSON.stringify(obj);
console.log(jsonString); // "{"name":"John","age":30}"JSON.parse() chuyển một chuỗi JSON trở lại thành một đối tượng JavaScript:
const backToObject = JSON.parse(jsonString);
console.log(backToObject); // { name: "John", age: 30 }Sao chép sâu bằng JSON:
const original = { a: 1, b: { x: 2 } };
const deepCopy = JSON.parse(JSON.stringify(original));
original.b.x = 3;
console.log(deepCopy.b.x); // 2 (hoàn toàn độc lập)Thử thách
DễTạo một hàm có tên processCart nhận một chuỗi JSON đại diện cho giỏ hàng. Giỏ hàng chứa một mảng sản phẩm có tên và giá. Nhiệm vụ của bạn là:
- Phân tích chuỗi JSON thành một đối tượng JavaScript
- Tạo HAI giỏ hàng riêng biệt từ chuỗi đó
- Trong giỏ hàng thứ hai:
- Thêm thuộc tính
discountedvào mỗi mặt hàng và đặt giá trị là false - Giảm giá 10% cho tất cả mặt hàng có
pricelớn hơn 50 - Đặt 'discounted' thành true cho những mặt hàng được giảm giá
- Thêm thuộc tính
- Trả về một mảng chứa cả hai giỏ hàng
Tự làm thử
function processCart(jsonString) {
// Viết code ở đây
}
// Đừng viết gì bên ngoài hàmBài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng chương trình
4JSON phần 2
Duyệt qua JSONJSON lồng nhauOptional chaining trong JSONSao chép nông và sâuÔn tập: Cửa hàng xe đạpÔn tập: Hệ Mặt Trời7Hệ thống quản lý thư viện
Tổng quan dự ánThêm sách10Quản lý hệ thống lễ hội
Tổng quan dự ánThêm phim và địa điểm2Mảng nhiều chiều
Kiến thức cơ bản về mảng 2 chiềuTruy cập phần tử trong mảng 2 chiềuVòng lặp lồng nhau với mảng 2 chiềuÔn tập về mảng 2 chiềuPhép cộng và phép trừ ma trậnMảng không đềuMảng 3 chiều và hơn nữaCác mẫu thường gặp với mảng 2 chiềuÔn tập về mảng3JSON phần 1
JSON là gì?Kiểm tra khóa có tồn tạiPhương thức của đối tượngToán tử spread phần 1Toán tử spread phần 2Xóa khóaÔn tập: thao tác với khóa trong JSONTự luyện tập: Trình biên dịch JavaScript online