Hướng dẫn compare 2 object javascript - so sánh 2 đối tượng javascript
Đối tượng là các loại tham chiếu để bạn có thể chỉ sử dụng 0 Show
# So sánh sâu thẳmYup, 2 cách cũng hoạt động cho các vật thể lồng sâu. # Tôi nên sử dụng cái nào?Điều đó phụ thuộc. Đối với 1, vấn đề đặt hà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, nó sẽ trả về sai. Trong khi nó không quan trọng trong Lodash 0, nó sẽ trả về đúng khi cặp giá trị khóa tồn tại.Đây là đề xuất của tôi. Đối với một giải pháp nhanh chóng và bẩn, tôi sẽ sử dụng 1. 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 cạnh kỳ lạ hơn, hãy sử dụng Lodash Way.# Es6 cách để 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ó đã giành được công việc 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ủ đố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 sự bình đẳng của hai chuỗi. Đó là lý do tại sao đơn đặt hàng quan trọng. Cảm ơn: @mustafauzun0 # Json.Stringify vs hiệu suất của LodashCole Turner: Đáng chú ý rằng các đối tượng không đảm bảo thứ tự sắp xếp và Stringify sẽ tốn nhiều hiệu suất hơn vì nó phải tuần tự hóa toàn bộ đối tượng trong khi Lodash có thể thoát ra sớm nếu tìm thấy mộ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
Nếu bạn đang sử dụng UnderCoreJS thì bạn chỉ cần sử dụng hàm _.isequal và nó so sánh tất cả các khóa và giá trị ở mỗi cấp độ phân cấp như ví dụ dưới đây. Nội dung chính ShowShow
Nếu tất cả các khóa và giá trị cho các khóa đó giống nhau trong cả hai đối tượng thì nó sẽ trả về đúng, nếu không thì hãy trả về sai. Đối tượng là các loại tham chiếu để bạn có thể chỉ sử dụng 0# So sánh sâu thẳm# Tôi nên sử dụng cái nào? # Tôi nên sử dụng cái nào?# Es6 cách để so sánh 2 đối tượng # Json.Stringify vs hiệu suất của Lodash # Es6 cách để so sánh 2 đối tượng# Json.Stringify vs hiệu suất của Lodash # Tài nguyên # Json.Stringify vs hiệu suất của Lodash# Tài nguyên Mã giải thích: Ví dụ Dữ liệu & Kết quả Mã để nhận được nhiều khóa cập nhật # Tài nguyên
Nếu tất cả các khóa và giá trị cho các khóa đó giống nhau trong cả hai đối tượng thì nó sẽ trả về đúng, nếu không thì hãy trả về sai. Đối tượng là các loại tham chiếu để bạn có thể chỉ sử dụng 0Yup, 2 cách cũng hoạt động cho các vật thể lồng sâu. Điều đó phụ thuộc. Đối với // es module import { isEqual, uniq } from "lodash"; // OR commonJS const _ = require("lodash"); const { isEqual, uniq } = _; const getUpdatedKey = (oldData, newData) => { const data = uniq([...Object.keys(oldData), ...Object.keys(newData)]); for(const key of data){ if(!isEqual(oldData[key], newData[key])){ return key; } } return null; } 1, vấn đề đặt hà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, nó sẽ trả về sai. Trong khi nó không quan trọng trong lodash // es module import { isEqual, uniq } from "lodash"; // OR commonJS const _ = require("lodash"); const { isEqual, uniq } = _; const getUpdatedKey = (oldData, newData) => { const data = uniq([...Object.keys(oldData), ...Object.keys(newData)]); for(const key of data){ if(!isEqual(oldData[key], newData[key])){ return key; } } return null; } 0, nó sẽ trả về đúng khi cặp giá trị khóa tồn tại.Đây là đề xuất của tôi. Đối với một giải pháp nhanh chóng và bẩn thỉu, tôi sẽ sử dụng 1. 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 cạnh kỳ lạ hơn, hãy sử dụng Lodash Way.Đâ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ó đã giành được công việc 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ủ đố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 sự bình đẳng của hai chuỗi. Đó là lý do tại sao đơn đặt hàng quan trọng.Mã giải thích:
Ví dụ Dữ liệu & Kết quả
Mã để nhận được nhiều khóa cập nhậtMã trên sẽ chỉ xác định khóa đầu tiên phù hợp với các tiêu chí. Chúng tôi có thể sửa đổi một chút để trả về nhiều hơn một khóa bằng cách giữ một mảng, đẩy vào nó và trả lại nó ở cuối:
Ví dụ cho nhiều khóa cập nhật
Xem thêm
Tôi có thể so sánh hai đối tượng trong JavaScript không?Thông thường, khi bạn so sánh các loại dữ liệu như INT và chuỗi trong JavaScript, bạn sử dụng các toán tử bình đẳng (== và ===). Tuy nhiên, so sánh các đối tượng với == và === sẽ không hoạt động. Để 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 các toán tử bình đẳng.comparing objects with == and === will not work. To fix this, one option is to stringify both objects and then use the equality operators.comparing objects with == and === will not work. To fix this, one option is to stringify both objects and then use the equality operators. Làm thế nào để bạn biết nếu hai đối tượng có cùng một khóa?Cách tiếp cận: Chúng tôi sẽ tìm thấy các khóa của cả hai đối tượng theo Object.Keys (), trả về một mảng các khóa của đối tượng đó.Để kiểm tra xem mọi khóa trong OBJ1 cũng có trong OBJ2 và nếu các giá trị của các khớp chính đó, chúng tôi sẽ sử dụng mọi phương thức ().Object.keys(), which returns an array of keys of that object. For checking that every key in obj1 is also present in obj2, and if values of those key matches, we will use every() method.Object. keys(), which returns an array of keys of that object. For checking that every key in obj1 is also present in obj2, and if values of those key matches, we will use every() method. Làm thế nào để bạn so sánh hai giá trị của các đối tượng?Phương thức bằng () của lớp đối tượng so sánh sự bình đẳng của hai đối tượng.Hai đối tượng sẽ bằng nhau nếu chúng chia sẻ cùng một địa chỉ bộ nhớ.Cú pháp: Boolean công khai (đối tượng OBJ). The two objects will be equal if they share the same memory address. Syntax: public boolean equals(Object obj). The two objects will be equal if they share the same memory address. Syntax: public boolean equals(Object obj) 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 đố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.Two object instances are equal if they have the same attributes and values (values are compared with == ), and are instances of the same class.Two object instances are equal if they have the same attributes and values (values are compared with == ), and are instances of the same class. |