Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

วิธีเปรียบเทียบ Object สองตัวใน JavaScript

Objects ไม่เหมือน arrays หรือ strings เปรียบเทียบด้วย "===" หรือ "==" ไม่ได้ ต้อง stringify ก่อน แล้วค่อยใช้ equality operators

ตัวอย่าง: stringify objects ก่อน แล้วเปรียบเทียบ

ตัวอย่างที่ 1 (Properties เรียงเหมือนกัน)

<html> <body> 
    <script> 
        const obj1 = {Name: "Rahim", City: 'Hyderabad', Country: "India"}; 
        const obj2 = {Name: "Rahim", City: 'Hyderabad', Country: "India"}; 
        document.write(JSON.stringify(obj1) === JSON.stringify(obj2)); 
    </script> 
</body> </html>

ผลลัพธ์

true

ตัวอย่างที่ 2: properties เหมือนกันแต่ ลำดับต่างกัน JSON.stringify() คืน false

ตัวอย่างที่ 2 (Properties เรียงต่างกัน)

<html> <body> 
    <script> 
        const obj1 = {Name: "Rahim", City: 'Hyderabad', Country: "India"}; 
        const obj2 = {Name: "Rahim", Country: "India", City: 'Hyderabad'}; 
        document.write(JSON.stringify(obj1) === JSON.stringify(obj2)); 
    </script> 
</body> </html>

ผลลัพธ์

false

แก้ด้วย library lodash ตรวจสอบ key/value pairs เท่ากันหรือไม่ ไม่สนใจลำดับ

ตัวอย่างที่ 3 (ใช้ Lodash _.isEqual)

<html> <head> 
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/0.10.0/lodash.min.js"></script> 
</head> <body> 
    <script> 
        const obj1 = {Name: "Rahim", City: 'Hyderabad', Country: "India"}; 
        const obj2 = {Name: "Rahim", Country: "India", City: 'Hyderabad'}; 
        document.write(JSON.stringify(obj1) === JSON.stringify(obj2)); 
        document.write("<br>"); 
        document.write(_.isEqual(obj1, obj2)); 
    </script> 
</body> </html>

ผลลัพธ์

false true