Đếm tất cả các thuộc tính trong đối tượng
Chào các bạn
Trong bài viết này mình sẽ hướng dẫn các bạn đếm tất cả các thuộc tính trong đối tượng.
Giải pháp
Chức năng này cũng đơn giản lắm. Nhưng để cho các bạn dể hình dung mình sẽ viết chức năng tự viết trước. Rồi đến chức năng có sẵng.
- Chức năng tự viết
Chức năng này chỉ việc đếm các keys trong đối tượng. Nên chúng ta cũng không có gì khó cả. Chỉ việc kiểm tra đó có phải là object không thôi
1let obj = { 2 name: "Hồ Quang Trí", 3 age: 89, 4 addres: ["Việt Nam"], 5 phone: ["90432432", "34334324233"], 6}; 7 8function getCountKeys(obj) { 9 if ( 10 typeof obj !== "object" || 11 !(Boolean(obj) && obj.constructor.name === "Object") 12 ) { 13 throw new Error("Đầu vào không hợp lệ"); 14 } 15 16 let count = 0; 17 18 for (let key in obj) { 19 count++; 20 } 21 22 return count; 23} 24 25let countKeys = getCountKeys(obj); 26 27console.log(countKeys); // 4
Như các bạn thấy. Đầu ra là 4. Đối tượng có 4 tài sản
- Phương pháp có sẵng
Áp dụng phương pháp có sẵng. Rất đơn giản và đầy tiện lợi. Cũng từ ví dụ trên chúng ta thay đỗi một chút
1let obj = { 2 name: "Hồ Quang Trí", 3 age: 89, 4 addres: ["Việt Nam"], 5 phone: ["90432432", "34334324233"], 6}; 7 8function getCountKeys(obj) { 9 if ( 10 typeof obj !== "object" || 11 !(Boolean(obj) && obj.constructor.name === "Object") 12 ) { 13 throw new Error("Đầu vào không hợp lệ"); 14 } 15 16 // Chỉ một dòng 17 return Object.keys(obj).length; 18} 19 20let countKeys = getCountKeys(obj); 21 22console.log(countKeys); // 4
Ở tất cả các ví dụ trên có một nhược điểm là sẽ bỏ qua hết tất cả các key có type là Symbol. Vậy giải pháp ở đây là gì. Rất đơn giản
Ví dụ:
1 2let id = Symbol("id"); // ký hiệu 3 4let obj = { 5 [id]: 123, 6 name: "Hồ Quang Trí", 7 age: 89, 8 addres: ["Việt Nam"], 9 phone: ["90432432", "34334324233"], 10}; 11 12function getCountKeys(obj) { 13 if ( 14 typeof obj !== "object" || 15 !(Boolean(obj) && obj.constructor.name === "Object") 16 ) { 17 throw new Error("Đầu vào không hợp lệ"); 18 } 19 20 // Chỉ một dòng 21 return Object.keys(obj).length; 22} 23 24let countKeys = getCountKeys(obj); 25console.log(countKeys); // 4 26 27let countKeysObj = Reflect.ownKeys(obj).length; 28console.log(countKeysObj); // 5
Ok vậy là xong. Chúng ta đã hoàn toàn đếm xong tất cả keys của 1 đối tượng. Nhưng bây giờ lại xãy ra một vấn đề. Nếu đối tượng lồng nhau sâu thì sẽ sai nhé.
Tổng kết
Trong bài viết này mình đã hướng dẫn một bài tập căn bản. Các bạn ko hiểu thì xem ví dụ và đầu ra nó nhé.
- đếm
- liệt kê
- giải thuật
- thuật toán
Các bài viết liên quan
Tài sản phương pháp trong lớp Number
Cùng nhau tìm hiểu các tài sản và phương pháp trong lớp NumberJavascriptTạo số ngẩu nhiên từ min đến max
Viết chức năng tạo số ngẩu nhiên từ min đến max không bao gồm maxGiải ThuậtCác kiểu dữ liệu trong javascript
Trong tất cả ngôn ngữ lập trình đều có các kiểu dữ liệu. Và trong javascript cũng vậyJavascript