Đối tượng so sánh nông javascript là gì?

Có gì sai với ví dụ3 và ví dụ4?

Kiểm tra bình đẳng sâu_______0

Sự khác biệt duy nhất là ở đây chúng ta đang đi sâu và chỉ so sánh các nguyên thủy

Tại sao tôi nên sử dụng so sánh nông sau đó?

Vì vậy, mặc dù có vẻ như so sánh sâu sắc là điều mọi người cần, nhưng thực tế lại khác một chút

Một trường hợp sử dụng như vậy là React Js, React sử dụng hàm nôngCompare[] để tạo các Thành phần thuần túy. ShallowCompare là cách hiệu quả để phát hiện các thay đổi, nó hy vọng bạn không làm thay đổi dữ liệu

Hơn nữa, vì chúng tôi không lặp lại thông qua đứa trẻ, chúng tôi tiết kiệm được rất nhiều thời gian, vì vậy so sánh nông là cách nhanh hơn

Trong JavaScript, các đối tượng luôn được lưu trữ theo tham chiếu. Điều đó có nghĩa là một đối tượng hoàn toàn bằng một đối tượng khác chỉ khi cả hai đều trỏ đến cùng một đối tượng trong bộ nhớ

Tuy nhiên, nếu bạn muốn kiểm tra xem hai POJO có cùng dữ liệu hay không?

Keys và Values ​​Shallow Equal

Một cách tiếp cận đơn giản là lặp qua từng khóa và giá trị trong hai đối tượng và kiểm tra xem các khóa và giá trị có hoàn toàn bằng nhau không

Bình đẳng sâu sắc bằng cách sử dụng JSON.stringify[]

Phần trước cho biết cách so sánh các đối tượng bằng cách kiểm tra xem khóa và giá trị của hai đối tượng có hoàn toàn bằng nhau không. Nhưng nếu một trong các giá trị là một đối tượng thì sao?

Bạn có thể tạo đệ quy objectsEqual[], nhưng sau đó bạn cần cẩn thận với đệ quy vô hạn. Một cách dễ dàng để so sánh xem hai POJO có bằng nhau hay không là so sánh các biểu diễn JSON của chúng bằng cách sử dụng JSON.stringify[]

Hàm JSON.stringify[] đi kèm với một số hạn chế khiến nó trở thành lựa chọn mờ nhạt để kiểm tra đẳng thức sâu. Thứ nhất, thứ tự quan trọng

Thứ hai, không phải tất cả các loại đều có thể biểu diễn trong JSON. Hàm JSON.stringify[] chuyển đổi ngày thành chuỗi và bỏ qua các khóa có giá trị là undefined, điều này có thể dẫn đến kết quả đáng ngạc nhiên

Sử dụng isEqual[] của Lodash

Hàm isEqual[] của Lodash là cách phức tạp nhất để so sánh hai đối tượng. Nó xử lý nhiều trường hợp khác nhau và tránh được rất nhiều cạm bẫy của hai cách tiếp cận trước đó

Hàm isEqual[] cũng đủ thông minh để tránh đệ quy vô hạn

Nếu bạn đang sử dụng Lodash, thì isEqual[] là cách tiếp cận tốt nhất để so sánh xem hai đối tượng có sâu bằng nhau hay không. Phương pháp so sánh nghiêm ngặt nông phù hợp với những trường hợp bạn không lo lắng về các đối tượng lồng nhau và JSON.stringify[] có thể giúp cung cấp một kiểm tra bình đẳng sâu sơ bộ trong trường hợp bạn không thể sử dụng Lodash. Tuy nhiên, nếu bạn có thể sử dụng Lodash, thì isEqual[] là cách tiếp cận tốt nhất để kiểm tra xem hai đối tượng có bằng nhau hay không

Rất có thể bạn đã từng nghe những thuật ngữ đó trước đây, nhưng trong trường hợp bạn chưa nghe, hãy tìm hiểu một số quyền về khái niệm

So sánh nông và sâu

Chúng là một kỹ thuật để giải quyết vấn đề so sánh mà Toán tử JavaScript cơ bản không thể tự giải quyết, chẳng hạn như so sánh xem hai đối tượng có bằng nhau về loại dữ liệu, kích thước và giá trị hay không

Và như bạn có thể đoán, chiến lược

┌────────────────────┬─────────┬──────┐
│ │ Shallow │ Deep │
├────────────────────┼─────────┼──────┤
│ Fast Performance │ ✔ │ ✖ │
│ Order Matter │ ✖ │ ✔ │
│ Reference Equality │ ✔ │ ✖ │
│ Strict │ ✔ │ ✔ │
└────────────────────┴─────────┴──────┘
4 so sánh bề ngoài sự bằng nhau của 2 toán hạng — chỉ ở cấp độ sâu thứ nhất— trong khi chiến lược
┌────────────────────┬─────────┬──────┐
│ │ Shallow │ Deep │
├────────────────────┼─────────┼──────┤
│ Fast Performance │ ✔ │ ✖ │
│ Order Matter │ ✖ │ ✔ │
│ Reference Equality │ ✔ │ ✖ │
│ Strict │ ✔ │ ✔ │
└────────────────────┴─────────┴──────┘
5 so sánh sự bằng nhau từ tất cả các cấp độ sâu

Vì vậy, cái nào tôi nên chọn?

Chà, nó phụ thuộc vào trường hợp sử dụng của bạn. Điều quan trọng nhất là bạn phải thực sự hiểu vấn đề mà bạn đang giải quyết bằng mã của mình và sự đánh đổi của từng phương pháp

Nói về sự đánh đổi

Hãy liệt kê một số ưu và nhược điểm của từng phương pháp

┌────────────────────┬─────────┬──────┐
│ │ Shallow │ Deep │
├────────────────────┼─────────┼──────┤
│ Fast Performance │ ✔ │ ✖ │
│ Order Matter │ ✖ │ ✔ │
│ Reference Equality │ ✔ │ ✖ │
│ Strict │ ✔ │ ✔ │
└────────────────────┴─────────┴──────┘

phụ thuộc

Chúng tôi sẽ sử dụng phiên bản cải tiến của toán tử JavaScript

┌────────────────────┬─────────┬──────┐
│ │ Shallow │ Deep │
├────────────────────┼─────────┼──────┤
│ Fast Performance │ ✔ │ ✖ │
│ Order Matter │ ✖ │ ✔ │
│ Reference Equality │ ✔ │ ✖ │
│ Strict │ ✔ │ ✔ │
└────────────────────┴─────────┴──────┘
6 mà chúng tôi đã trình bày ở đây trước đây, nếu bạn chưa đọc nó, hãy nhấp vào liên kết bên dưới và xem thử

So sánh đối tượng cạn là gì?

so sánh nông là khi các thuộc tính của đối tượng được so sánh được thực hiện bằng cách sử dụng "===" hoặc đẳng thức nghiêm ngặt và sẽ không tiến hành so sánh sâu hơn vào các thuộc tính.

So sánh cạn và sâu là gì?

Và như bạn có thể đã đoán, chiến lược nông so sánh bề ngoài sự bằng nhau của 2 toán hạng — chỉ ở mức độ sâu thứ nhất— trong khi chiến lược sâu so sánh sự bằng nhau từ tất cả các mức độ sâu.

Cách tốt nhất để so sánh các đối tượng trong JavaScript là gì?

Cách so sánh hai đối tượng trong JavaScript .
Thông thường, khi bạn so sánh các kiểu dữ liệu như int và chuỗi trong JavaScript, bạn sử dụng các toán tử đẳng thức [ == và === ]. .
Để khắc phục điều này, một tùy chọn là xâu chuỗi cả hai đối tượng và sau đó sử dụng toán tử đẳng thức

Làm cách nào chúng ta có thể so sánh hai đối tượng trong JavaScript?

isEqaul là thuộc tính của lodash dùng để so sánh các đối tượng JavaScript . Nó được sử dụng để biết liệu hai đối tượng có giống nhau hay không. Ví dụ, có hai mảng có số phần tử bằng nhau, thuộc tính và giá trị cũng giống nhau. Ngay cả các thuộc tính không theo cùng một thứ tự, nó sẽ trả về true.

Chủ Đề