通过JS深度判断两个对象字段相同
代码:
/**
*判断此对象是否是Object类型
*@param{Object}obj
*/
functionisObject(obj){
returnObject.prototype.toString.call(obj)==='[objectObject]';
};
/**
*判断此类型是否是Array类型
*@param{Array}arr
*/
functionisArray(arr){
returnObject.prototype.toString.call(arr)==='[objectArray]';
};
/**
*深度比较两个对象是否相同
*@param{Object}oldData
*@param{Object}newData
*/
functionequalsObj(oldData,newData){
//类型为基本类型时,如果相同,则返回true
if(oldData===newData)returntrue;
if(isObject(oldData)&&isObject(newData)&&Object.keys(oldData).length===Object.keys(newData).length){
//类型为对象并且元素个数相同
//遍历所有对象中所有属性,判断元素是否相同
for(constkeyinoldData){
if(oldData.hasOwnProperty(key)){
if(!equalsObj(oldData[key],newData[key]))
//对象中具有不相同属性返回false
returnfalse;
}
}
}elseif(isArray(oldData)&&isArray(oldData)&&oldData.length===newData.length){
//类型为数组并且数组长度相同
for(leti=0,length=oldData.length;i
测试:
varoldArr=[1,2,
[
{
name:"张三",
age:11,
}
],
{
name:'李四',
age:21,
em:[
{
address:'邯郸',
phone:'123'
},
{
address:'北京',
phone:234
}
]
}
];
varnewArr=[1,2,
[
{
name:"张三",
age:11
}
],
{
name:'李四',
age:21,
em:[
{
address:'邯郸',
phone:'123'
},
{
address:'北京',
phone:234
}
]
}
];
console.log(equalsObj(oldArr,newArr));
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。