Computer >> Máy Tính >  >> Lập trình >> Javascript

So sánh các khóa và giá trị trong một đối tượng JSON khi một đối tượng có thêm các khóa trong JavaScript


Giả sử, chúng ta có hai đối tượng JSON như sau -

const obj1 = {a: "apple", b: "banana", c: "carrot"};
const obj2 = {a: "apple", e: "egg", b: "banana", c: "carrot", d: "dog"};

Chúng tôi được yêu cầu viết một hàm JavaScript có hai đối tượng như vậy. Chúng tôi muốn có thể kiểm tra Boolean so sánh hai đối tượng mà không phải xóa dữ liệu khỏi một trong hai đối tượng.

Ví dụ:nếu tôi sử dụng dữ liệu ở trên, kiểm tra Boolean sẽ trả về true vì giá trị của các khóa trong cả hai đối tượng đều khớp nhau.

Tuy nhiên, giả sử obj1 giữ nguyên nhưng obj2 là như sau -

const obj1 = {a: "apple", b: "banana", c: "carrot"}
const obj2 = {a: "ant", e: "egg", b: "banana", c: "carrot", d: "dog"}

Với dữ liệu này, nó sẽ trả về false vì giá trị của khóa không khớp ngay cả khi các trường khác khớp và một số trường không có trong cả hai đối tượng.

Ví dụ

Mã cho điều này sẽ là -

const obj1 = {
   a: "apple",
   b: "banana",
   c: "carrot"
}
const obj2 = {
   a: "apple",
   b: "banana",
   c: "carrot",
   d: "dog",
   e: "egg"
}
const obj3 = {a: "apple", b: "banana", c: "carrot"}
const obj4 = {a: "ant", e: "egg" ,b: "banana", c: "carrot", d: "dog"}
function checkEquality(a, b) {
   const entries1 = Object.entries(a);
   const entries2 = Object.entries(b);
   const short = entries1.length > entries2 ? entries2 : entries1;
   const long = short === entries1 ? b : a;
   const isEqual = short.every(([k, v]) => long[k] === v);
   return isEqual;
}
console.log(checkEquality(obj1, obj2))
console.log(checkEquality(obj3, obj4))

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

true
false