JavaScript判斷兩個對象內容是否相等


ES6中有一個方法判斷兩個對象是否相等,這個方法判斷是兩個對象引用地址是否一致

let obj1= {
    a: 1
  }
  let obj2 = {
    a: 1
  }
console.log(Object.is(obj1, obj2)) // false

let obj3 = obj1
console.log(Object.is(obj1, obj3)) // true

console.log(Object.is(obj2, obj3)) // false
 
        

當需求是比較兩個對象內容是否一致時就沒用了。

想要比較兩個對象內容是否一致,思路是要遍歷對象的所有鍵名和鍵值是否都一致:

1、判斷兩個對象是否指向同一內存

2、使用Object.getOwnPropertyNames獲取對象所有鍵名數組

3、判斷兩個對象的鍵名數組是否相等

4、遍歷鍵名,判斷鍵值是否都相等

  let obj1 = {
    a: 1,
    b: {
      c: 2
    }
  }
  let obj2 = {
    b: {
      c: 3
    },
    a: 1
  }
  function isObjectValueEqual(a, b) {
    // 判斷兩個對象是否指向同一內存,指向同一內存返回true
    if (a === b) return true
    // 獲取兩個對象鍵值數組
    let aProps = Object.getOwnPropertyNames(a)
    let bProps = Object.getOwnPropertyNames(b)
    // 判斷兩個對象鍵值數組長度是否一致,不一致返回false
    if (aProps.length !== bProps.length) return false
    // 遍歷對象的鍵值
    for (let prop in a) {
      // 判斷a的鍵值,在b中是否存在,不存在,返回false
      if (b.hasOwnProperty(prop)) {
        // 判斷a的鍵值是否為對象,是則遞歸,不是對象直接判斷鍵值是否相等,不相等返回false
        if (typeof a[prop] === 'object') {
          if (!isObjectValueEqual(a[prop], b[prop])) return false
        } else if (a[prop] !== b[prop]) {
          return false
        }
      } else {
        return false
      }
    }
    return true
  }
  console.log(isObjectValueEqual(obj1, obj2))  // false


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM