Python so sánh hai đối tượng

Đối tượng là các loại tham chiếu để bạn chỉ có thể sử dụng const person1 = { "firstName": "John", "lastName": "Doe", "age": 35 } const person2 = { "firstName": "John", "lastName": "Doe", "age": 35 } JSON.stringify(person1) === JSON.stringify(person2); // true3 hoặc const person1 = { "firstName": "John", "lastName": "Doe", "age": 35 } const person2 = { "firstName": "John", "lastName": "Doe", "age": 35 } JSON.stringify(person1) === JSON.stringify(person2); // true4 để so sánh 2 đối tượng. Một cách nhanh chóng để so sánh nếu 2 đối tượng có cùng giá trị khóa đang được sử dụng

const person1 = { "firstName": "John", "lastName": "Doe", "age": 35 } const person2 = { "firstName": "John", "lastName": "Doe", "age": 35 } JSON.stringify(person1) === JSON.stringify(person2); // true0. Một cách khác là sử dụng chức năng lodashconst person1 = { "firstName": "John", "lastName": "Doe", "age": 35 } const person2 = { "firstName": "John", "lastName": "Doe", "age": 35 } JSON.stringify(person1) === JSON.stringify(person2); // true1

Nội dung chính Hiển thị

  • # So sánh sâu thăm thẳm
  • # Tôi nên sử dụng cái nào?
  • # Es6 way to so sánh 2 đối tượng
  • #Json. Stringify so với hiệu suất của Lodash
  • # Tài nguyên
  • Hai loại bình đẳng trong JavaScript
  • So sánh thủ công
  • Phương thức JSON. xâu chuỗi ()
  • So sánh bằng thư viện lodash
  • So sánh bằng cách sử dụng thư viện công bằng sâu
  • Phương pháp dành riêng cho khung
  • Kết luận
  • Blog liên quan
  • Tôi có thể so sánh hai đối tượng trong JavaScript không?
  • Bạn có thể sử dụng == để so sánh các đối tượng không?
  • Các đối tượng so sánh JavaScript là gì?
  • Bình đẳng tham số trong JavaScript là gì?

# So sánh sâu thăm thẳm

Yup, 2 cách cũng hoạt động cho các vật thể có thể lồng sâu

# Tôi nên sử dụng cái nào?

Điều đó phụ thuộc. Đối trọng với

const person1 = { "firstName": "John", "lastName": "Doe", "age": 35 } const person2 = { "firstName": "John", "lastName": "Doe", "age": 35 } JSON.stringify(person1) === JSON.stringify(person2); // true2, thứ tự quan trọng. Vì vậy, nếu cặp giá trị khóa được đặt hàng khác nhau trong hai đối tượng nhưng giống nhau, thì nó sẽ trả về sai. Trong khi nó không quan trọng trong lodashconst person1 = { "firstName": "John", "lastName": "Doe", "age": 35 } const person2 = { "firstName": "John", "lastName": "Doe", "age": 35 } JSON.stringify(person1) === JSON.stringify(person2); // true1, nó sẽ trả về đúng khi cặp giá trị chính tồn tại

This is the output of me. Đối với một giải pháp nhanh chóng và lộn xộn, tôi sẽ sử dụng

const person1 = { "firstName": "John", "lastName": "Doe", "age": 35 } const person2 = { "firstName": "John", "lastName": "Doe", "age": 35 } JSON.stringify(person1) === JSON.stringify(person2); // true2. Nhưng đối với một giải pháp mạnh mẽ hơn bao gồm nhiều trường hợp gần kỳ lạ hơn, hãy sử dụng Lodash Way

# Es6 way to so sánh 2 đối tượng

Đây là một giải pháp được đề xuất bởi @mustafauzun0. Mặc dù vậy, rất ít điều cần lưu ý, nó đã đạt được thành công với các đối tượng lồng nhau và thứ tự của các phím rất quan trọng. Ý tưởng đằng sau điều này tương tự như cách chuỗi. Nó bao phủ các đối tượng thành một chuỗi và so sánh nếu các chuỗi là một kết quả phù hợp. Về cơ bản nó so sánh đẳng cấp của hai chuỗi. Đó là lý do tại sao đơn đặt hàng quan trọng

Cảm ơn. @mustafauzun0

#Json. Stringify so với hiệu suất của Lodash

Cole Turner. Đáng lưu ý rằng các đối tượng không chắc chắn thứ tự sắp xếp và Stringify sẽ tốn nhiều hiệu quả hơn vì nó phải tuần tự hóa toàn bộ đối tượng khi Lodash có thể thoát ra sớm nếu tìm thấy một từ khóa không khớp. Điều này xuất hiện trong các cuộc phỏng vấn 🙂

Cảm ơn. @Coleturner

BLNKDOTSPACE. Lodash nhanh hơn đáng kể. Bởi vì Lodash sẽ bỏ cuộc ngay khi nó đạt đến sự khác biệt đầu tiên, nhưng Stringify đi ngay cho đến khi kết thúc một cách không cần thiết. Nếu bạn có các mảng nhỏ thì không sao nhưng đối với các trường hợp sử dụng cá nhân của tôi với hơn 1000 sự kiện/sản phẩm trong danh sách, tôi sẽ không bao giờ sử dụng Stringify

Cảm ơn. @blnkdotspace

# Tài nguyên

  • Tài liệu web MDN - JSON. xâu chuỗi
  • Lodash. bình đẳng
  • Hiểu các đối tượng JavaScript
  • Bình đẳng đối tượng trong JavaScript
  • JavaScript so sánh đối tượng sâu - JSON
  • tràn ngăn xếp. Có tốt không khi sử dụng JSON. Stringify để so sánh chiều sâu và nhân bản?
  • Làm thế nào để xác định bình đẳng cho hai đối tượng JavaScript?

JavaScript có 7 loại dữ liệu nguyên thủy. Chúng ta có thể so sánh giá trị của bất kỳ loại nào trong số này bằng toán tử bình đẳng. Tuy nhiên, việc so sánh các loại không nguyên thủy như đối tượng là khó khăn vì các toán tử bình đẳng thông thường không so sánh các giá trị đối tượng như người ta có thể mong đợi.

Trong bài viết này, chúng tôi sẽ thảo luận về các năm cách nhau để xác định sự bình đẳng của các đối tượng JavaScript

Hai loại bình đẳng trong JavaScript

Khi thảo luận về so sánh đối tượng trong JavaScript, có hai loại bình đẳng mà người ta phải biết

  • Bình đẳng tham chiếu.   . Xác định xem hai toán hạng được cung cấp có tham chiếu đến cùng một thể hiện tham chiếu/đối tượng hay không
  • Bình đẳng sâu sắc.   . Xác định xem các đối tượng có bằng nhau hay không bằng cách so sánh từng thuộc tính trong toán hạng

Bình đẳng tham chiếu có thể được xác định với các toán tử bình đẳng như bình đẳng nghiêm ngặt (===) hoặc bình đẳng dốt chế độ (==) và cả bằng cách sử dụng các đối tượng hàm. is (), nhưng việc xác định bình đẳng sâu là khó khăn vì các đối tượng có thể được lồng vào. Tuy nhiên, năm sau đây để thực hiện so sánh đối tượng giúp các nhà phát triển hoạt động dễ dàng hơn khi cần phải so sánh bình đẳng sâu sắc. (===) hoặc bình đẳng cưỡng chế (==) và cũng bằng cách sử dụng Object. is(), nhưng việc xác định đẳng thức sâu rất phức tạp vì các đối tượng có thể được lồng vào nhau. Tuy nhiên, năm cách thực hiện so sánh đối tượng sau đây giúp công việc của nhà phát triển dễ dàng hơn khi cần so sánh đẳng thức sâu

Khám phá thư viện điều khiển UI JavaScript tốt nhất và toàn diện nhất trên thị trường

Khám phá ngay bây giờ

So sánh thủ công

Suy nghĩ ban đầu rõ ràng về bất kỳ ai về tâm trí của vấn đề này đối với vấn đề này sẽ là lấy từng tài sản và so sánh nó với các thuộc tính và giá trị của các hạng mục toán học khác. Nhưng, như đã đề cập trước đây, những đối tượng này có thể có các thuộc tính lồng nhau. Do đó, chúng ta phải sử dụng một phương pháp đệ quy để so sánh các đối tượng lồng nhau này

Một triển khai phương pháp đệ quy như sau sẽ có thể cho chúng ta biết liệu hai đối tượng đã cho bằng nhau không

const person1 = { "firstName": "John", "lastName": "Doe", "age": 35 }; const person2 = { "firstName": "John", "lastName": "Doe", "age": 35, }; const isDeepEqual = (object1, object2) => { const objKeys1 = Object.keys(object1); const objKeys2 = Object.keys(object2); if (objKeys1.length !== objKeys2.length) return false; for (var key of objKeys1) { const value1 = object1[key]; const value2 = object2[key]; const isObjects = isObject(value1) && isObject(value2); if ((isObjects && !isDeepEqual(value1, value2)) || (!isObjects && value1 !== value2) ) { return false; } } return true; }; const isObject = (object) => { return object != null && typeof object === "object"; }; console.log(isDeepEqual(person1, person2)); //true

Phương thức JSON. xâu chuỗi ()

Phương pháp này là một mẹo mà chúng ta có thể sử dụng để xác định xem hai đối tượng có bằng sâu hay không. Mặc dù JavaScript không có giải pháp Vượt trội để so sánh hai đối tượng, nhưng nó không gặp vấn đề gì khi so sánh hai chuỗi. Do đó, trong phương pháp này, chúng tôi chuyển đổi hai đối tượng của mình thành các chuỗi bằng phương thức JSON. Stringify() and so sánh hai giá trị để xác định xem các đối tượng có giống nhau không. Ngay cả khi các đối tượng thuộc tính lồng nhau, phương pháp này cũng có thể xử lý chúng. Điều quan trọng cần lưu ý là phương pháp này sử dụng bình đẳng nghiêm ngặt (===) trên các thuộc tính; . JSON. stringify() và so sánh hai giá trị để xác định xem các đối tượng có sâu bằng nhau không. Ngay cả khi các đối tượng có các thuộc tính lồng nhau, phương thức này cũng có thể xử lý các thuộc tính đó. Điều quan trọng cần lưu ý là phương pháp này sử dụng đẳng thức nghiêm ngặt (===) trên các thuộc tính;

const person1 = { "firstName": "John", "lastName": "Doe", "age": 35 } const person2 = { "firstName": "John", "lastName": "Doe", "age": 35 } JSON.stringify(person1) === JSON.stringify(person2); // true

Phương pháp này có nhược điểm, tuy nhiên. Lấy ví dụ trên và thay đổi thứ tự của các thuộc tính trong đối tượng Person2. người2

const person2= { "age": 35, "firstName": "John", "lastName": "Doe" }

Vì các thuộc tính của đối tượng và giá trị của chúng không thay đổi, chúng tôi sẽ mong đợi được trả về đúng khi các đối tượng được so sánh. Vì các chuỗi được tạo là khác nhau nên lần này có sự khác biệt trong thứ tự, vì vậy so sánh sẽ trả về sai

Do đó, điều quan trọng cần lưu ý là việc có các đơn đặt hàng khác nhau của các thuộc tính có thể cho kết quả không chính xác khi sử dụng phương thức này

Tất cả mọi thứ mà nhà phát triển cần biết để sử dụng điều khiển JavaScript trong ứng dụng web đều được ghi lại hoàn toàn

Read now

So sánh bằng thư viện lodash

Thư viện nổi tiếng   . Sử dụng phương thức đẳng thức () từ thư viện này, chúng ta có thể thực hiện so sánh giữa các hạng đã cho. Nó sẽ trả về một giá trị boolean cho biết các hạng toán học có bình đẳng dựa trên sự nghiêm ngặt của JavaScript (===) trên tất cả các thuộc tính của hai đối tượng đã cho hay không. isEqual() từ thư viện này, chúng ta có thể thực hiện so sánh sâu giữa các toán hạng đã cho. Nó sẽ trả về một giá trị Boolean cho biết liệu các toán hạng có bằng nhau hay không dựa trên đẳng thức nghiêm ngặt của JavaScript (===) trên tất cả các thuộc tính của hai đối tượng đã cho

const person1 = { "firstName": "John", "lastName": "Doe", "age": 35 } const person2 = { "firstName": "John", "lastName": "Doe", "age": 35 } JSON.stringify(person1) === JSON.stringify(person2); // true0

Theo tài liệu & NBSP; . v. Như một phần thưởng, chúng tôi cũng có thể tải xuống phương thức này dưới dạng mô-đun NPM riêng biệt

So sánh bằng cách sử dụng thư viện công bằng sâu

Thư viện công bằng sâu là mô-đun NPM & NBSP; . Thư viện này cung cấp chức năng xác định sự bình đẳng sâu sắc giữa hai đối tượng

Phương thức Deepequal () từ thư viện lấy ba tham số. Hai đầu tiên là các xếp hạng được so sánh và tham số thứ ba là tham số tùy chọn tùy chọn. Với tùy chọn, chúng tôi có thể chỉ định tài liệu sử dụng bình đẳng nghiêm ngặt (===) hoặc Bình đẳng đẳng chế độ (==) để so sánh các nút lá. Tùy chọn mặc định là sử dụng chế độ bình thường để so sánh các nút lá. phương thức deepEqual() từ thư viện có ba tham số. Hai tham số đầu tiên là toán hạng được so sánh và tham số thứ ba là tham số tùy chọn tùy chọn. Với tùy chọn này, chúng ta có thể chỉ định sử dụng đẳng thức nghiêm ngặt (===) hay đẳng thức ép buộc (==) để so sánh các nút lá. Tùy chọn mặc định là sử dụng đẳng thức cưỡng chế để so sánh các nút lá

const person1 = { "firstName": "John", "lastName": "Doe", "age": 35 } const person2 = { "firstName": "John", "lastName": "Doe", "age": 35 } JSON.stringify(person1) === JSON.stringify(person2); // true1

Lưu ý rằng giá trị tuổi là một số trong đối tượng Person1 và một chuỗi trong đối tượng Person2. Vì tùy chọn nghiêm trọng là sai theo mặc định, thư viện công bằng sâu sử dụng bình đẳng không chế độ trên các nút lá, do đó chức năng này trả về đúng. Nếu tham số nghiêm trọng của hàm được đặt thành TRUE, phương thức này sẽ trả về sai. giá trị tuổi là một số trong đối tượng person1 và một chuỗi trong đối tượng person2. Vì tùy chọn nghiêm ngặt là sai theo mặc định, thư viện bằng sâu sử dụng đẳng thức cưỡng chế trên các nút lá, vì vậy hàm này trả về giá trị đúng. Nếu tham số nghiêm ngặt của hàm được đặt thành true, phương thức này sẽ trả về false

const person1 = { "firstName": "John", "lastName": "Doe", "age": 35 } const person2 = { "firstName": "John", "lastName": "Doe", "age": 35 } JSON.stringify(person1) === JSON.stringify(person2); // true0

Bộ điều khiển JavaScript SyncFusion cho phép bạn xây dựng các ứng dụng kinh doanh mạnh mẽ

Attempt now

Phương pháp dành riêng cho khung

Một số khung JavaScript, chẳng hạn như Angular và NodeJS, cung cấp chức năng hợp nhất để xác định sự bình đẳng sâu sắc trong các khung của chúng

  • Nút. js. khẳng định. deepstrictequal (thực tế, dự kiến, tin nhắn) Phương thức DeepStrictequal () được cung cấp bởi mô-đun ASP sẽ được sử dụng khi một lỗi được ném nếu hai thứ hạng không bằng nhau. Phương pháp này sẽ kiểm tra sự bình đẳng nghiêm trọng trên các nút lá. Nó sẽ trả về không xác định nếu các hạng thanh toán bằng nhau và sẽ bị lỗi nếu chúng không sâu và bằng nhau. ________ 6. khẳng định. deepStrictEqual(actual,expected, message)
    Phương thức deepStrictEqual() do mô-đun khẳng định cung cấp là một phương thức tích hợp trong Node. js có ba tham số. hai toán hạng và một thông báo dưới dạng tham số tùy chọn sẽ được sử dụng khi xảy ra lỗi nếu hai toán hạng không bằng nhau. Phương pháp này sẽ kiểm tra sự bình đẳng nghiêm ngặt trên các nút lá. Nó sẽ trả về không xác định nếu các toán hạng bằng nhau và sẽ đưa ra lỗi nếu chúng không sâu và hoàn toàn bằng nhau. const person1 = { "firstName": "John", "lastName": "Doe", "age": 35 } const person2 = { "firstName": "John", "lastName": "Doe", "age": 35 } JSON.stringify(person1) === JSON.stringify(person2); // true1
  • Góc cạnh. góc cạnh. equals (OBJ1, OBJ2) Góc thư viện cũng   . Phương pháp này được cung cấp theo mô-đun NG. Nó cần hai tham số, các hạng toán học, được so sánh với sự bình đẳng và trả về giá trị boolean để biết các hạng toán học có bình đẳng dựa trên sự nghiêm ngặt của JavaScript (===). ________ 7. góc cạnh. equals(obj1, obj2)
    Thư viện Angular cũng cung cấp một phương thức giúp chúng ta xác định sự bằng nhau sâu sắc giữa hai đối tượng. Phương thức này được cung cấp trong mô-đun ng. Phải mất hai tham số, toán hạng, để được so sánh về đẳng thức và trả về giá trị Boolean cho biết liệu toán hạng có bằng nhau hay không dựa trên đẳng thức nghiêm ngặt của JavaScript (===). const person1 = { "firstName": "John", "lastName": "Doe", "age": 35 } const person2 = { "firstName": "John", "lastName": "Doe", "age": 35 } JSON.stringify(person1) === JSON.stringify(person2); // true2

Kết luận

Việc so sánh các đối tượng sâu JavaScript có thể khó khăn, vì vậy cần phải xử lý cẩn thận. Như đã thảo luận ở trên, có nhiều phương pháp, bao gồm các thư viện của bên thứ ba, giúp chúng tôi xác định sự bình đẳng sâu sắc giữa các đối tượng. Để chọn phương pháp phù hợp cho trường hợp sử dụng, người ta phải xem xét từng yêu cầu và tùy chọn phương thức

Tôi hy vọng bài viết này sẽ giúp bạn đưa ra quyết định đúng đắn. Thank you have read

SyncFusion Essential JS 2 là bộ duy nhất bạn cần để xây dựng một ứng dụng. Nó chứa hơn 65 thành phần UI hiệu suất cao, nhẹ, mô-đun và trả lời ứng dụng trong một gói. Tải xuống một bản dùng thử miễn phí để đánh giá các điều khiển ngay hôm nay

Nếu bạn có bất kỳ câu hỏi hoặc nhận xét nào, bạn có thể liên hệ với chúng tôi thông qua các diễn đàn hỗ trợ của chúng tôi, & NBSP; . Chúng tôi luôn sẵn sàng hỗ trợ bạn

Blog liên quan

  • Dễ dàng tạo một biểu mẫu có thể điền bằng Trình xử lý Word Word JavaScript
  • Xây dựng một tiến trình thanh trong JavaScript bằng cách sử dụng máy đo tuyến tính
  • Ưu và nhược điểm của việc sử dụng JavaScript Interop trong Blazor
  • Top 6 tính năng JavaScript ES12 bạn nên sử dụng

Tôi có thể so sánh hai đối tượng trong JavaScript không?

ISEQAUL là thuộc tính của Lodash được sử 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. Đối với EX, có hai mảng có số lượng phần tử, thuộc tính và giá trị bằng nhau cũng giống nhau. Ngay cả các thuộc tính cũng không theo thứ tự mà nó sẽ trả về đúng. . 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.

Bạn có thể sử dụng == để so sánh các đối tượng không?

So sánh các đối tượng ¶ Khi sử dụng toán tử so sánh (==), các biến đối tượng được so sánh theo cách đơn giản, cụ thể là. hai trường hợp các đối tượng bằng nhau nếu chúng có cùng thuộc tính và giá trị (giá trị được so sánh với ==) và là các trường hợp củaCùng lớp. Hai thể hiện đối tượng là bằng nhau nếu chúng có cùng thuộc tính và giá trị (giá trị được so sánh với == ) và là thể hiện của cùng một lớp .

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

ShallowSo sánh thực hiện kiểm tra bình đẳng trên các đối tượng đạo cụ hiện tại và các đối tượng NextProps cũng như các đối tượng Trạng thái hiện tại và NextState. Nó thực hiện điều này bằng cách lặp lại các từ khóa của các đối tượng được so sánh và trả về đúng khi giá trị của một từ khóa trong mỗi đối tượng không hoàn toàn bằng nhau. thực hiện kiểm tra bình đẳng nông trên các đối tượng props và nextProps hiện tại cũng như các đối tượng state và nextState hiện tại

Chủ đề