So sánh các khóa đối tượng javascript

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 = {

            

    true
    0_______1_______1
    true
    2

            

    true
    4

            

    true
    6
    true
    7

        

    true
    9

     

        

    true
    2

        

    true
    4

            

    true
    4

            

    true
    6
    true
    7

        

    true
    9

     

        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

            

    true
    9

                7 // Define the first object6

        

    true
    9

     

            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

    Làm cách nào để so sánh khóa của hai đối tượng trong JavaScript?

    JavaScript. So sánh hai đối tượng để xác định xem đối tượng thứ nhất có chứa các giá trị thuộc tính tương đương với đối tượng thứ hai hay không .
    Sử dụng đối tượng. keys[] để lấy tất cả các khóa của đối tượng thứ hai
    Sử dụng mảng. nguyên mẫu. mọi [], Đối tượng. nguyên mẫu

    Làm cách nào để so sánh giá trị khóa đối tượng trong JavaScript?

    Chính xác là điều tương tự cũng xảy ra trong JavaScript, có các đối tượng và chứa các thuộc tính cho chúng. Toán tử đẳng thức [===] xác minh xem hai toán hạng có bằng nhau hay không và trả về một giá trị Boolean . Nếu cả hai toán hạng có kiểu khác nhau, toán tử này trả về false, ngược lại trả về true.

    Làm cách nào để kiểm tra xem các khóa của hai đối tượng có bằng nhau trong JavaScript không?

    Sử dụng phương thức 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.

    Làm cách nào để so sánh hai thuộc tính đối tượng trong JavaScript?

    Thông thường, khi bạn so sánh các kiểu dữ liệu như int và chuỗi trong JavaScript, bạn sử dụng các toán tử đẳng thức [ == 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 rồi sử dụng toán tử đẳng thức .

Chủ Đề