How can I get a list of the differences between two JavaScript object graphs?

前端 未结 10 584
终归单人心
终归单人心 2020-11-29 01:02

I want to be able to get a list of all differences between two JavaScript object graphs, with the property names and values where the deltas occur.

For what it is w

10条回答
  •  忘掉有多难
    2020-11-29 01:14

    var d = { 
       FirstName : "John", 
       LastName : "Doh", 
       Age : 30, 
       EMailAddresses : [
          "john.doe@gmail.com", 
          "jd@initials.com"
       ], 
       Children : [ 
          { 
             FirstName : "Sara", 
             LastName : "Doe", 
             Age : 2 
          }, { 
             FirstName : "Beth", 
             LastName : "Doe", 
             Age : 5 
          } 
       ] 
    };
    
    var f = { 
       FirstName : "John", 
       LastName : "Doe", 
       Age : 33, 
       EMailAddresses : [
          "john.doe@gmail.com", 
          "jdoe@hotmail.com"
       ], 
       Children : [ 
          { 
             FirstName : "Sara", 
             LastName : "Doe", 
             Age : 3 
          }, { 
             FirstName : "Bethany", 
             LastName : "Doe", 
             Age : 5 
          } 
       ] 
    };
    
    resultobj = []
    function comp_obj(t1,t2){
    	flag = 1;
    	key1_arr = Object.keys(t1)
    	key2_arr = Object.keys(t2)
    	if(key1_arr.length == key2_arr.length){
    		for(key1 in t1){
    			ty1    = Object.prototype.toString.call(t1[key1])
    			ty2    = Object.prototype.toString.call(t2[key1])
    			if(ty1 == ty2) {
    				if(ty1 == '[object String]' || ty1 == '[object Number]' ){
    					if(t2[key1] != t1[key1]){
    						flag = 0;
    						break;
    					}	
    				}else if(ty1 == '[object Array]'){
    					var result = comp_arr(t1[key1],t2[key1]);
    					console.log(ty1,ty2)
    					if(!result)
    						flag = 0;
    				}else if(ty1  == '[object Object]'){
    					var result = comp_obj(t1[key1],t2[key1])
    					if(!result)
    						flag = 0;
    						
    				}
    			}else{
    				flag = 0;
    				break;	
    			}
    
    		}
    	}else{
    		flag	= 0;
    	}
    	if(flag)
    		return true
    	else
    		return false;
    }
    function comp_arr(a,b){
    	flag = 1;
    	if(a.length == b.length ){
    		for(var i=0,l=a.length;i
      
        
          

    DIFFERENCE TABLE

    S.no Name Of the Key Object1 Value Object2 Value

提交回复
热议问题