Kiểm tra xem khóa có tồn tại trong JavaScript đối tượng JSON lồng nhau không

Đây là phương pháp của tôi để tìm kiếm trong JSON lồng nhau, bạn có thể chia sẻ phương pháp của mình bằng cách trả lời bài viết này. Tôi sẽ chia sẻ luồng ở đây và cả phần lập trình

Ảnh của Mulyadi trên Bapt

Mã nguồn

Đôi khi, tôi cần xử lý một số thao tác hơi phức tạp trên một đối tượng JSON

Ví dụ: chúng tôi có một đối tượng JSON được gọi là nhân viên. Tôi muốn biết bộ phận của Mary là gì, có nghĩa là tôi muốn lấy chìa khóa “kế toán”

{"accounting" : [{ "firstName" : "John","lastName"  : "Doe","age"       : 23 },{ "firstName" : "Mary","lastName"  : "Smith","age"      : 32 }],"sales"      : [{ "firstName" : "Sally","lastName"  : "Green","age"      : 27 },{ "firstName" : "Jim","lastName"  : "Galley","age"       : 41 }]}

Trong bài viết này, tôi sẽ không thực hiện nhiều kiểm tra và chỉ muốn chia sẻ quy trình

Bước đầu tiên tôi làm là làm phẳng đối tượng JSON này, sau đó tôi muốn lấy khóa của “Mary”. Lần này chìa khóa là “kế toán. 1. họ". Sau đó, tôi sẽ chia chuỗi này bằng cách “. ”, sau đó nhận được từ đầu tiên, đó là “kế toán”

{
'accounting.0.firstName': 'John',
'accounting.0.lastName': 'Doe',
'accounting.0.age': 23,
'accounting.1.firstName': 'Mary',
'accounting.1.lastName': 'Smith',
'accounting.1.age': 32,
'sales.0.firstName': 'Sally',
'sales.0.lastName': 'Green',
'sales.0.age': 27,
'sales.1.firstName': 'Jim',
'sales.1.lastName': 'Galley',
'sales.1.age': 41
}

phần lập trình

Tạo một thư mục có tên bất cứ thứ gì bạn muốn, chẳng hạn như “flatten_employees”. Tạo một chỉ mục. js tại thư mục gốc

Đi đến thiết bị đầu cuối và gõ

npm init --y

Cài đặt gói phẳng để làm phẳng JSON sau này

npm i flat

Chuyển đến chỉ mục. js

import flatten from "flat"const employees = {"accounting" : [{ "firstName" : "John","lastName"  : "Doe","age"       : 23 },{ "firstName" : "Mary","lastName"  : "Smith","age"      : 32 }],"sales"      : [{ "firstName" : "Sally","lastName"  : "Green","age"      : 27 },{ "firstName" : "Jim","lastName"  : "Galley","age"       : 41 }]}const flatten_employees = flatten[employees];const name = "Mary"const found = Object.keys[flatten_employees].find[key=>flatten_employees[key]===name];const team = found.split[".",1];console.log[`${name} is from ${team} team` ]

Trong trường hợp này, chúng tôi đã sử dụng flatten_employees để lưu trữ JSON được làm phẳng

Ví dụ, nếu chúng ta muốn biết Mary ở khoa nào, chúng ta đặt tên là “Mary”

Sau đó, chúng tôi sử dụng đối tượng. keys để tìm khóa nào có giá trị bằng Mary

Chúng tôi lấy khóa accounting.1.firstName và lưu trữ nó trong hằng số “đã tìm thấy

Sau đó, chúng tôi chia phần này bằng cách lấy . làm dấu phân cách. Và chỉ cần lấy từ đầu tiên và lưu nó dưới dạng “đội” không đổi

Trả về một bản sao của một đối tượng có các giá trị không phải boolean giống như boolean, e. g. 'có', 'không', 'ok', 1, được chuyển đổi thành boolean. Sử dụng danh sách trắng lồng nhau gồm các khóa được chỉ định để chuyển đổi để giới hạn chuyển đổi thành boolean đối với các khóa đó

Hãy chú ý đến việc lồng các hàm đệ quy quá nhiều cấp. Mặc dù có khả năng giải quyết nhiều vấn đề, nhưng việc lồng nhau nổi tiếng là khó hiểu trong nháy mắt. Để tránh nhầm lẫn, hãy chú ý đến nơi các hàm đệ quy có thể được rút ra khỏi vị trí lồng nhau của chúng mà không tốn chi phí thời gian chạy đáng kể và làm như vậy bất cứ khi nào có thể. Nếu bạn có hơn 3 cấp hàm lồng nhau, rất có thể các nhà phát triển đồng nghiệp của bạn sẽ gặp khó khăn khi theo dõi nó

Để kiểm tra xem một đối tượng có thuộc tính lồng nhau hay không, hãy sử dụng toán tử xâu chuỗi tùy chọn - ?.. Toán tử ?. cho phép bạn đọc giá trị của thuộc tính lồng nhau mà không đưa ra lỗi nếu thuộc tính không tồn tại trên đối tượng, e. g. obj?.a?.b

Trong đoạn mã, chúng tôi sử dụng toán tử xâu chuỗi tùy chọn để kiểm tra xem một thuộc tính lồng nhau có tồn tại trên đối tượng hay không

Sử dụng toán tử ?. tương tự như truy cập một thuộc tính trên một đối tượng có ký hiệu .[dấu chấm], tuy nhiên, ?. không đưa ra lỗi khi thuộc tính lồng nhau không tồn tại

Thay vào đó, nếu thuộc tính của đối tượng không tồn tại, toán tử ?. trả về

{
'accounting.0.firstName': 'John',
'accounting.0.lastName': 'Doe',
'accounting.0.age': 23,
'accounting.1.firstName': 'Mary',
'accounting.1.lastName': 'Smith',
'accounting.1.age': 32,
'sales.0.firstName': 'Sally',
'sales.0.lastName': 'Green',
'sales.0.age': 27,
'sales.1.firstName': 'Jim',
'sales.1.lastName': 'Galley',
'sales.1.age': 41
}
4

Trong đoạn mã, chúng tôi sử dụng toán tử ?. để truy cập thuộc tính lồng nhau không tồn tại trên đối tượng

Khi toán tử ?. cố gắng truy cập thuộc tính ?.0 của đối tượng, nó nhận được

{
'accounting.0.firstName': 'John',
'accounting.0.lastName': 'Doe',
'accounting.0.age': 23,
'accounting.1.firstName': 'Mary',
'accounting.1.lastName': 'Smith',
'accounting.1.age': 32,
'sales.0.firstName': 'Sally',
'sales.0.lastName': 'Green',
'sales.0.age': 27,
'sales.1.firstName': 'Jim',
'sales.1.lastName': 'Galley',
'sales.1.age': 41
}
4 và đoản mạch trả về
{
'accounting.0.firstName': 'John',
'accounting.0.lastName': 'Doe',
'accounting.0.age': 23,
'accounting.1.firstName': 'Mary',
'accounting.1.lastName': 'Smith',
'accounting.1.age': 32,
'sales.0.firstName': 'Sally',
'sales.0.lastName': 'Green',
'sales.0.age': 27,
'sales.1.firstName': 'Jim',
'sales.1.lastName': 'Galley',
'sales.1.age': 41
}
4

Nếu bạn bỏ qua toán tử ?. và chỉ sử dụng ký hiệu . [dấu chấm], bạn sẽ gặp lỗi - "Không thể đọc thuộc tính ?.5 của không xác định"

Lưu ý rằng ?. không được hỗ trợ trong Internet Explorer, nếu bạn cần hỗ trợ trình duyệt, bạn có thể thêm ?.7 cho nó, sử dụng ?.8 để biên dịch mã của bạn thành phiên bản JavaScript cũ hơn hoặc sử dụng phương pháp tiếp theo được đề cập trong bài viết này

Một cách tiếp cận khác là kiểm tra thủ công xem một thuộc tính có tồn tại trên một đối tượng hay không

Trong đoạn mã, chúng tôi kiểm tra thủ công sự tồn tại của thuộc tính lồng nhau

Chúng tôi sử dụng toán tử ?.9 [và], có nghĩa là các điều kiện trong câu lệnh obj?.a?.b0 của chúng tôi sẽ được kiểm tra từ trái sang phải, từng cái một

Nếu bất kỳ điều kiện nào đánh giá thành giá trị sai, khối obj?.a?.b0 sẽ không chạy

Điều này rất rõ ràng và kém thanh lịch hơn toán tử ?., tuy nhiên nó được hỗ trợ trong Internet Explorer

Trong ví dụ trên, chúng tôi kiểm tra rõ ràng xem mỗi thuộc tính có bằng

{
'accounting.0.firstName': 'John',
'accounting.0.lastName': 'Doe',
'accounting.0.age': 23,
'accounting.1.firstName': 'Mary',
'accounting.1.lastName': 'Smith',
'accounting.1.age': 32,
'sales.0.firstName': 'Sally',
'sales.0.lastName': 'Green',
'sales.0.age': 27,
'sales.1.firstName': 'Jim',
'sales.1.lastName': 'Galley',
'sales.1.age': 41
}
4 không. Bạn có thể xem các ví dụ chỉ sử dụng toán tử ?.9, tuy nhiên cách tiếp cận này dễ bị lỗi

Ví dụ sau kiểm tra xem giá trị thuộc tính của đối tượng có trung thực không

Giá trị trung thực trong JavaScript là tất cả các giá trị không sai. Giá trị giả là. obj?.a?.b5, obj?.a?.b6, obj?.a?.b7, obj?.a?.b8,

{
'accounting.0.firstName': 'John',
'accounting.0.lastName': 'Doe',
'accounting.0.age': 23,
'accounting.1.firstName': 'Mary',
'accounting.1.lastName': 'Smith',
'accounting.1.age': 32,
'sales.0.firstName': 'Sally',
'sales.0.lastName': 'Green',
'sales.0.age': 27,
'sales.1.firstName': 'Jim',
'sales.1.lastName': 'Galley',
'sales.1.age': 41
}
4, ?.0

Đừng viết mã như thế này

Trong đoạn mã, chúng tôi kiểm tra xem thuộc tính của một đối tượng có phải là ?.1 hay không, điều này không đủ để chúng tôi xác định xem thuộc tính đó có tồn tại trên đối tượng hay không

Thuộc tính ?.2 được đặt thành obj?.a?.b6, là giá trị ?.4, vì vậy mặc dù thuộc tính ?.2 tồn tại trên đối tượng nhưng khối obj?.a?.b0 không bao giờ chạy vì điều kiện không được đáp ứng

Làm cách nào để kiểm tra sự tồn tại của khóa đối tượng JavaScript lồng nhau?

Chúng ta có thể viết hàm JavaScript của riêng mình để kiểm tra xem một thuộc tính lồng sâu có tồn tại trong một đối tượng hay không. }; bảng điều khiển. log[checkNested[obj, 'level1', 'level2', 'level3']]; bảng điều khiển.

Làm cách nào để kiểm tra xem một thuộc tính có tồn tại trong JavaScript đối tượng lồng nhau không?

Để kiểm tra xem một đối tượng có thuộc tính lồng nhau hay không, hãy sử dụng toán tử xâu chuỗi tùy chọn - ? . . Các ?. toán tử cho phép bạn đọc giá trị của thuộc tính lồng nhau mà không đưa ra lỗi nếu thuộc tính không tồn tại trên đối tượng, e. g. đối tượng?. một?.

Làm cách nào để kiểm tra đối tượng lồng nhau có trống trong JavaScript không?

keys để kiểm tra đối tượng rỗng. const trống = {}; . Object. phím[trống]. độ dài === 0 && trống .

Làm cách nào để kiểm tra xem giá trị có tồn tại trong đối tượng JavaScript không?

Phương thức hasOwnProperty[] sẽ kiểm tra xem một đối tượng có chứa thuộc tính trực tiếp hay không và sẽ trả về true hoặc false nếu thuộc tính đó tồn tại hay không. Phương thức hasOwnProperty[] sẽ chỉ trả về giá trị true cho các thuộc tính trực tiếp và không trả về các thuộc tính kế thừa từ chuỗi nguyên mẫu.

Chủ Đề