js兩物件比對欄位值

最後回傳清單含有 值不同之欄位、舊值、新值

by cactus77kiki

HTML

<button type="button" onclick="compareobject()">
GetCompare
</button>

<script>
var obj1 = {'agent_no':'3333', 'agent_no1':'_','agt_type':'A;B;','addr1':'addr123',
			      'agcountry':'AA','selection1':'Y','discount':'0.00',
            'agt_typeList':['A','B'],'date1':null,'date2': null};
var obj2 = {'agent_no':'3333', 'agent_no1':'_','agt_type':'A;B;C;','addr1':'addr135',
			      'agcountry':'AA','selection1':'N','discount':'0.10',
            'agt_typeList':['A','B','C'],'date1':'2015/1/8','date2':''};            
function compareobject(){
	var result=[];
	//以obj1為基準去做比對
	//1.取出obj1之欄位
  var objkeys = Object.keys(obj1);
	//console.log(objkeys);
  for(var i=0;i<objkeys.length;i++){
  	//欄位名稱
  	var cfield = objkeys[i]; 
    //找到比對的兩個物件的值,並將null轉empty    
    var obj1val = obj1[objkeys[i]];
    var obj2val = obj2[objkeys[i]];
    if(chkIsNullorEmpty(obj1val))
    	obj1val = "";
    if(chkIsNullorEmpty(obj2val))
    	obj2val = "";
    var ctype = typeof(obj1val);
    //不比較object型態的資料    	
    if(ctype === 'object'){}
    else{    	
            
      if(obj1val != obj2val){
      	//console.log(objkeys[i]+":"+"obj1:"+obj1val+" obj2:"+obj2val);
        result.push({'field_name': objkeys[i],
        						 'ovalue': obj1[objkeys[i]],
                     'nvalue': obj2[objkeys[i]]
        						});				            
      }
    }
  }
  console.log(result);        
  //return result;
}
function chkIsNullorEmpty(param) {   	
    if (param) {
    		if (typeof (param) == "object")
            return false;
        var trimpara = param.trim();
        if (trimpara)
            return false;
        else
            return true;
    }    
    else
        return true;    //為null/empty
}
</script>

JavaScript

/*
ref:https://zellwk.com/blog/looping-through-js-objects/
*/