🦍 Đếm Thuộc Tính 🦍

Đếm tất cả các thuộc tính trong đối tượng

Chúng ta sẽ chùng nhau đếm nó. Bao gồm cả keys có kiểu Symbol nữa.
js_masterGiải Thuật
giải thuật.jpg

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.

  1. 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

  1. 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

OFFJS.COM - Blog học tập giải trí - 🐲

Chia sẻ nhiều kiến thức thú vị trong lập trình cũng như cuộc sống.

Giới thiệu


Trang web này mình sẽ nói về kiến thức lập trình và cuộc sống mà các bạn mới học hay đang dự định học. Có một bước đi đầu đời vững chắc.

Hồ Quang Trí.jpg

Đi kèm với đó là những lý thuyết và các dòng code minh họa. Để các bạn dễ hình dung.

Đơn nhiên cũng không dễ dàng ngày một ngày hai mà học hết được.

Học Tập Là Một Con Đường Dài Vô Tận

Nó sẽ nuốt các bạn vô số thời gian nhưng bù lại khi đã biết thì mọi thứ thật là tuyệt.

1console.log("Hồ Quang Trí");

Nếu có ai nói bạn học lập trình trong vòng 3 đến 6 tháng thì mình xin nói thật không bao giờ có chuyện đó nhé.

Chúc các bạn thành công.

Chân trang

phone-toan-phat.png

0353210168

address-toan-phat.png

Việt Nam