Làm thế nào để bạn so sánh các đối tượng trong javascript?
Như bạn có thể thấy ví dụ trên, cả Show
Có hai điều bạn có thể kiểm tra trong khi thực hiện đẳng thức đối tượng1️⃣ Các đối tượng có cùng thể hiện 2️⃣ Các đối tượng có cùng giá trị 1️. Các đối tượng có cùng thể hiệnJavaScript có hai cách tiếp cận để khớp các giá trị
So sánh theo tham chiếu có nghĩa là đối tượng đề cập đến cùng một vị trí trong bộ nhớ ví dụ let name = { Ở đây, Để kiểm tra instance bạn có thể dùng đẳng thức let name = { Có một vài plugin giúp bạn về điều kiện trên, nơi bạn chỉ cần sử dụng let name = {1 để kiểm tra các giá trị đối tượng
let name = {Tóm tắt ⅀ Trong đối tượng, nếu bạn thực hiện kiểm tra đối tượng cho hai đối tượng thì bạn có thể sử dụng let name = {4 Bởi vì hiểu được điều gì khó khăn hoặc không hiệu quả có thể giúp chúng ta hiểu sâu hơn về lý do tại sao và thường dẫn chúng ta đến việc tìm kiếm hoặc phát triển các giải pháp sẽ hiệu quả. Một liên kết đến một video tuyệt vời ở cuối câu chuyện này Các loại dữ liệu nguyên thủy so với các loại Tham chiếu (không nguyên thủy)Về cơ bản, nó liên quan đến JavaScript nguyên thủy so với JavaScript không nguyên thủy (đối tượng) Như tôi sẽ chứng minh, thông qua mã và phép loại suy, các biến chứa kiểu nguyên thủy được cấp một giá trị **** trong bộ nhớ. Các biến chứa loại không nguyên thủy được cung cấp ** tham chiếu ** trong bộ nhớ Kiểu nguyên thủy và cấp phát bộ nhớví dụ 1 Các kiểu nguyên thủy, giữ cho nó đơn giản, là số, chuỗi, boolean, không xác định và null. Một danh sách đầy đủ có thể được tìm thấy ở đây Điều gì đang xảy ra? Để mượn một phép loại suy phổ biến, giả sử tôi viết số 1 vào một tờ giấy nhớ và đặt nó lên bảng trắng. Đó là để nhắc nhở bản thân rằng tôi có một nhiệm vụ ngày hôm nay. (Tất nhiên tôi có thể viết nhiệm vụ nhưng hãy để nó đơn giản. ) Đối tác văn phòng của tôi viết số 1 vào một tờ giấy dán để nhắc nhở bản thân rằng anh ấy có cuộc họp lúc mấy giờ và cũng ghi nó lên bảng trắng Các ghi chú dán khác nhau và mỗi ghi chú chứa giá trị riêng của chúng Hãy coi mỗi ghi chú dán là bộ nhớ được cấp phát và số là giá trị được lưu trữ trong bộ nhớ được cấp phát. Khi được so sánh, trong trường hợp này, chúng chứa cùng một giá trị, 1 Khi chúng tôi so sánh các nguyên hàm, chúng tôi so sánh các giá trị được lưu trữ trong các vị trí bộ nhớ Nếu tôi nhận một nhiệm vụ mới và thay đổi ghi chú dán của mình thành 2, thì nó không ảnh hưởng đến ghi chú dán khác. Mỗi người đều có giá trị riêng ví dụ 2 Biến a được cấp phát bộ nhớ và được gán giá trị là 1. Biến b được cung cấp không gian bộ nhớ riêng và được cung cấp giá trị của biến a, 1. Nó không trỏ đến a, nó độc lập với a và chứa giá trị riêng của nó Vậy khi thay đổi biến a thì biến b giữ nguyên Trong JavaScript, mọi nguyên hàm đều có không gian bộ nhớ riêng khi được khai báo. Khi được gán một giá trị, giá trị đó sẽ đi vào không gian bộ nhớ Loại tham chiếu và cấp phát bộ nhớCác kiểu tham chiếu, để đơn giản, là Đối tượng, Hàm và Mảng, được gọi chung là đối tượng. Xem thêm thông tin tại đây ví dụ 3 Điều quan trọng cần hiểu ở đây là mỗi biến, obj1 và obj2 (có thể là Đối tượng, Mảng hoặc Hàm) chỉ chứa một tham chiếu đến một vị trí trong bộ nhớ. Không phải giá trị của đối tượng Các vị trí là riêng biệt, vì vậy các tài liệu tham khảo là khác nhau và so sánh không thành công. Chúng tôi không so sánh các giá trị của các đối tượng, mà là các tham chiếu đến các vị trí bộ nhớ của chúng Vì vậy, đối với các loại tham chiếu JavaScript, chúng tôi nhận được phân bổ trong bộ nhớ khi đối tượng được khai báo, nhưng biến chỉ nhận được tham chiếu đến vị trí của đối tượng trong bộ nhớ chứ không phải giá trị của nó Quay lại ví dụ về ghi chú dán của chúng tôi Nếu tôi quyết định tạo một danh sách các nhiệm vụ (không phải nguyên thủy) và đặt nó trên bàn làm việc của mình, tờ giấy dán trên bảng trắng sẽ chứa thông tin cho tôi biết nơi tìm danh sách chứ không phải chính danh sách đó Ghi chú dán có nội dung như “nhìn trên bàn, góc dưới bên trái. ” Nếu tôi quyết định tạo một danh sách nhiệm vụ thứ hai và đặt nó trên bàn của mình, một miếng dán khác sẽ được đặt trên bảng trắng cho tôi biết vị trí tìm danh sách thứ hai, “hãy tìm trên bàn, góc dưới cùng bên phải. ) Nếu tôi so sánh các tin nhắn ghi chú dán trên bảng trắng, chúng không bằng nhau Vì vậy, ngay cả khi danh sách nhiệm vụ 2 giống với danh sách nhiệm vụ 1 (thứ tự giống hoặc khác nhau), các tham chiếu sẽ khác nhau và chúng sẽ không bằng nhau Chỉ định các loại tham chiếuNếu bạn nhớ lại trong Ví dụ 2, chúng ta đã gán một giá trị nguyên hàm cho biến a. Sau đó chúng ta gán cho biến b giá trị trong biến a Vì mỗi cái đều có không gian bộ nhớ riêng nên việc thay đổi giá trị của biến a không làm thay đổi giá trị của biến b Với các loại tham chiếu thì khác Ví dụ 4 Trong trường hợp này, chúng bằng nhau, vì các biến chứa thông tin giống nhau, cùng tham chiếu đến vị trí của đối tượng trong bộ nhớ Tương tự với ghi chú dán, nó giống như thể tôi có hai ghi chú dán trên bảng trắng cho tôi biết nơi tìm danh sách ban đầu (trên bàn, góc dưới bên trái. ) Chúng chứa thông tin giống nhau nên bằng nhau Ví dụ 5 Thay đổi giá trị của obj1 hoặc obj2 sẽ thay đổi giá trị khác vì cả hai đều trỏ đến cùng một đối tượng. (So sánh với Ví dụ 2. ) Làm thế nào để chúng ta so sánh các đối tượng?So sánh các đối tượng rất dễ dàng, sử dụng === hoặc Object. Là(). Hàm này trả về true nếu chúng có cùng tham chiếu và false nếu chúng không Một lần nữa, tôi xin nhấn mạnh, đó là so sánh các tham chiếu đến các đối tượng, không phải các khóa và giá trị của các đối tượng Vì vậy, từ Ví dụ 3, Đối tượng. là(obj1,obj2); . Trong ví dụ 4, đối tượng. là(obj1,obj2); Vì vậy, ngay cả khi hai đối tượng chứa cùng một dữ liệu, === và Đối tượng. is() sẽ trả về false, trừ khi các biến chứa tham chiếu đến cùng một đối tượng So sánh các khóa và giá trị đối tượng phức tạp hơn Giải pháp có thể đơn giảnMột giải pháp đơn giản có thể là JSON. xâu chuỗi các đối tượng và sau đó so sánh các chuỗi. Điều này hoạt động tốt nếu các phím theo cùng một thứ tự. Điều này không thể được đảm bảo tuy nhiên. Ngoài ra, bạn đang so sánh chuỗi chứ không phải đối tượng Một ý tưởng khácMột bước đi đúng hướng là sử dụng Object. keys() và Object. giá trị(). Hoặc đối tượng. mục() Phần kết luậnVì vậy, chúng ta đã thấy rằng việc so sánh hai đối tượng không chỉ đơn thuần là nhìn vào các biến. Các biến này chỉ chứa tham chiếu Việc xác định xem chúng có chứa các giá trị giống nhau hay không có thể là một quá trình phức tạp Tôi đánh giá cao video youtube này về việc xác định theo chương trình xem hai giá trị đối tượng có bằng nhau hay không Bạn có thể sử dụng == để so sánh các đối tượng không?Toán tử == so sánh xem hai tham chiếu đối tượng có trỏ đến cùng một đối tượng hay không .
Làm cách nào để so sánh hai đối tượng trong JavaScript và nhận được sự khác biệt?Chúng tôi sẽ lấy hai đối tượng, lặp lại đối tượng đầu tiên bằng cách sử dụng vòng lặp forEach(), kiểm tra sự bằng nhau trong cả hai đối tượng, nếu các giá trị tại bất kỳ điểm nào không khớp, chúng tôi sẽ cập nhật một cờ, thoát khỏi vòng lặp và trả về
Làm cách nào để so sánh hai danh sách đối tượng trong JavaScript?Để lấy sự khác biệt giữa hai mảng đối tượng. . Sử dụng phương thức filter() để lặp lại mảng đầu tiên Kiểm tra xem mỗi đối tượng không được chứa trong mảng thứ hai Lặp lại bước 1 và 2 cho mảng thứ hai Nối các kết quả để có được sự khác biệt hoàn toàn Làm cách nào để so sánh khóa của hai đối tượng trong JavaScript?JavaScript. So sánh hai đối tượng để xác định xem đối tượng thứ nhất có chứa các giá trị thuộc tính tương đương với đối tượng thứ hai hay không . Sử dụng đối tượng. keys() để lấy tất cả các khóa của đối tượng thứ hai Sử dụng mảng. nguyên mẫu. mọi (), Đối tượng. nguyên mẫu |