JavaScript判斷對象是否相等


實現一、

var obj = {a:'a'},obj1 = {b:'b'},obj2 = {a:'a'};
就是使用
JSON.stringify()
先把對象轉化成字符串,
這樣就可以啦

console.log(JSON.stringify(obj) == JSON.stringify(obj1));//false
console.log(JSON.stringify(obj) == JSON.stringify(obj2));//true

弊端:這樣不是很嚴謹,如果一個對象里是有兩個屬性的,只是位置不一樣而已,這樣的方法就是錯誤的

var a ={"name":"lsx","age":12};

var b ={"age":12,"name":"lsx"};

console.log(JSON.stringify(a) == JSON.stringify(b))

------false

 

實現二、

思路
只要兩個對象的名和鍵值都相同。那么兩個對象的內容就相同了

1.用Object.getOwnPropertyNames拿到對象的所有鍵名數組
2.比對鍵名數組的長度是否相等。否=>false。真=>3
3.比對鍵名對應的鍵值是否相等

 function isObjectValueEqual(a, b) {
        var aProps = Object.getOwnPropertyNames(a);
        var bProps = Object.getOwnPropertyNames(b);

        if (aProps.length != bProps.length) {
            return false;
        }

        for (var i = 0; i < aProps.length; i++) {
            var propName = aProps[i];
            var propA = a[propName];
            var propB = b[propName];
            if ( propA !== propB) {
                    return false;
            }
        }
        return true;

 

 

弊端:粗略一看沒問題,但是細心的同學發現如果 鍵值也是對象的話,那這個方法就不管用了,比如下面的測試數據

 var a = {
        id:1,
        name:2,
        c:{
            age:3
        }
    };
    var b = {
        id:1,
        name:2,
        c:{
            age:3
        }
    }
    console.log(isObjectValueEqual(a,b));//false

 

 

實現三、

在實現二的基礎上遞歸實現

isObjectValueEqual(a, b) {
     var aProps = Object.getOwnPropertyNames(a);
     var bProps = Object.getOwnPropertyNames(b);
      if (aProps.length != bProps.length) {
           return false;
      }
      for (var i = 0; i < aProps.length; i++) {
        var propName = aProps[i]

        var propA = a[propName]
        var propB = b[propName]
        if ((typeof (propA) === 'object')) {
          if (this.isObjectValueEqual(propA, propB)) {
              return true
            } else {
              return false
            }
        } else if (propA !== propB) {
          return false
        } else { }
      }
    return true
    },

再次測試:

 var a = {
        id:1,
        name:2,
        c:{
            age:3
        }
    };
    var b = {
        id:1,
        name:2,
        c:{
            age:3
        }
    }
    console.log(isObjectValueEqual(a,b));//true

 【注】、上面三種方式實現三是最靠譜的


免責聲明!

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



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