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/
*/