Mặc dù hai đối tượng khác nhau có thể có cùng thuộc tính với các giá trị bằng nhau, nhưng chúng không được coi là bằng nhau khi so sánh bằng cách sử dụng toán tử đẳng thức lỏng lẻo hoặc nghiêm ngặt [==
hoặc ===
]. Điều này là do mảng và đối tượng trong JavaScript được so sánh bằng tham chiếu. Điều này không giống như các giá trị nguyên thủy được so sánh theo giá trị
JSON. xâu chuỗi lại
JSON.stringify[]
thường là giải pháp cho vấn đề này. Mặc dù nó có thể hữu ích trong một số trường hợp, nhưng việc so sánh các chuỗi được đăng nhiều kỳ có thể có những cạm bẫy riêng. Phổ biến nhất trong số này liên quan đến các giá trị tương tự, nhưng không bằng nhau, dẫn đến cùng một chuỗi được đánh số thứ tự
So sánh bình đẳng sâu sắc
Hóa ra, việc so sánh hai đối tượng không hề đơn giản. Đây là lý do tại sao các hàm trợ giúp so sánh bình đẳng nông hoặc sâu rất phổ biến. Chúng thường sử dụng đệ quy để so sánh sâu hai đối tượng, chiếm hầu hết các tình huống như giá trị trống, loại đặc biệt và lồng nhau
Hàm trợ giúp ở trên xử lý tất cả các vấn đề này và được giải thích sâu hơn trong đoạn mã bằng
Hơn như thế này
So sánh các giá trị trong JavaScript là một trong những nhiệm vụ phổ biến nhất, nhưng nó có rất nhiều điều bạn cần lưu ý
Làm cách nào để so sánh hai đối tượng để xác định đối tượng đầu tiên chứa các giá trị thuộc tính tương đương với đối tượng thứ hai trong JavaScript?
Cải thiện bài viết
Lưu bài viết
Thích bài viết
- Cập nhật lần cuối. 23 tháng 4 năm 2021
- Đọc
- Bàn luận
- khóa học
- Luyện tập
- Băng hình
Cải thiện bài viết
Lưu bài viết
Đưa ra hai đối tượng obj1 và obj2 và nhiệm vụ là kiểm tra xem obj1 có chứa tất cả các giá trị thuộc tính của obj2 trong JavaScript không
Input: obj1: { name: "John", age: 23; degree: "CS" } obj2: {age: 23, degree: "CS"} Output: true Input: obj1: { name: "John", degree: "CS" } obj2: {name: "Max", age: 23, degree: "CS"} Output: false
Để giải quyết vấn đề này, chúng tôi làm theo các phương pháp sau
Cách tiếp cận 1. Đó là một cách tiếp cận ngây thơ để giải quyết vấn đề này. Theo cách tiếp cận này, chúng tôi lặp lại obj2 bằng cách sử dụng lệnh for. trong vòng lặp và ở mỗi lần lặp, chúng tôi kiểm tra khóa hiện tại của cả hai đối tượng không bằng nhau, chúng tôi trả về false nếu không sau khi hoàn thành vòng lặp, chúng tôi trả về true
Thí dụ
Javascript
// Define the first object
let obj1 = {
true0_______1_______1
true2
true4
true6
true7
true9
true2
true4
true4
true6
true7
true9
4
6
7
0
2
3
4
5
6
7_______27_______8
7_______28_______0
7_______28_______2
7_______28_______4
5
6
7
8
9
7_______1_______9
true9
7 // Define the first object
6
true9
1
3
4
đầu ra
true
Cách tiếp cận 2. Theo cách tiếp cận này, chúng tôi tạo một mảng gồm tất cả các khóa của obj2 bằng cách sử dụng Đối tượng. keys[] và sau đó sử dụng Array. every[] chúng ta kiểm tra xem tất cả các thuộc tính của obj2 có bằng obj1 hay không
Phương thức tĩnh Object.keys[]
trả về một mảng gồm các tên thuộc tính khóa chuỗi có thể đếm được của chính đối tượng đã cho
Object.keys[obj]
obj
Một đối tượng
Một mảng các chuỗi đại diện cho các khóa thuộc tính có khóa chuỗi có thể đếm được của chính đối tượng đã cho
Object.keys[]
trả về một mảng có các phần tử là các chuỗi tương ứng với vô số tên thuộc tính khóa chuỗi được tìm thấy trực tiếp trên object
. Điều này giống như lặp với vòng lặp for...in
, ngoại trừ vòng lặp for...in
cũng liệt kê các thuộc tính trong chuỗi nguyên mẫu. Thứ tự của mảng được trả về bởi Object.keys[]
giống như thứ tự được cung cấp bởi vòng lặp for...in
Nếu bạn cần các giá trị thuộc tính, hãy sử dụng
// Simple array
const arr = ["a", "b", "c"];
console.log[Object.keys[arr]]; // ['0', '1', '2']
// Array-like object
const obj = { 0: "a", 1: "b", 2: "c" };
console.log[Object.keys[obj]]; // ['0', '1', '2']
// Array-like object with random key ordering
const anObj = { 100: "a", 2: "b", 7: "c" };
console.log[Object.keys[anObj]]; // ['2', '7', '100']
// getFoo is a non-enumerable property
const myObj = Object.create[
{},
{
getFoo: {
value[] {
return this.foo;
},
},
},
];
myObj.foo = 1;
console.log[Object.keys[myObj]]; // ['foo']
1 để thay thế. Nếu bạn cần cả khóa thuộc tính và giá trị, hãy sử dụng // Simple array
const arr = ["a", "b", "c"];
console.log[Object.keys[arr]]; // ['0', '1', '2']
// Array-like object
const obj = { 0: "a", 1: "b", 2: "c" };
console.log[Object.keys[obj]]; // ['0', '1', '2']
// Array-like object with random key ordering
const anObj = { 100: "a", 2: "b", 7: "c" };
console.log[Object.keys[anObj]]; // ['2', '7', '100']
// getFoo is a non-enumerable property
const myObj = Object.create[
{},
{
getFoo: {
value[] {
return this.foo;
},
},
},
];
myObj.foo = 1;
console.log[Object.keys[myObj]]; // ['foo']
2 để thay thế// Simple array
const arr = ["a", "b", "c"];
console.log[Object.keys[arr]]; // ['0', '1', '2']
// Array-like object
const obj = { 0: "a", 1: "b", 2: "c" };
console.log[Object.keys[obj]]; // ['0', '1', '2']
// Array-like object with random key ordering
const anObj = { 100: "a", 2: "b", 7: "c" };
console.log[Object.keys[anObj]]; // ['2', '7', '100']
// getFoo is a non-enumerable property
const myObj = Object.create[
{},
{
getFoo: {
value[] {
return this.foo;
},
},
},
];
myObj.foo = 1;
console.log[Object.keys[myObj]]; // ['foo']
Nếu bạn muốn tất cả các thuộc tính riêng có khóa chuỗi, kể cả những thuộc tính không đếm được, hãy xem
// Simple array
const arr = ["a", "b", "c"];
console.log[Object.keys[arr]]; // ['0', '1', '2']
// Array-like object
const obj = { 0: "a", 1: "b", 2: "c" };
console.log[Object.keys[obj]]; // ['0', '1', '2']
// Array-like object with random key ordering
const anObj = { 100: "a", 2: "b", 7: "c" };
console.log[Object.keys[anObj]]; // ['2', '7', '100']
// getFoo is a non-enumerable property
const myObj = Object.create[
{},
{
getFoo: {
value[] {
return this.foo;
},
},
},
];
myObj.foo = 1;
console.log[Object.keys[myObj]]; // ['foo']
3Đối số phi đối tượng là. Chỉ các chuỗi có thể có các thuộc tính vô số riêng, trong khi tất cả các nguyên hàm khác trả về một mảng trống