欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

通过JS深度判断两个对象字段相同

程序员文章站 2023-11-05 20:42:22
代码: /** * 判断此对象是否是object类型 * @param {object} obj */ function isobject(obj)...

代码:

/**
* 判断此对象是否是object类型
* @param {object} obj 
*/
function isobject(obj){
return object.prototype.tostring.call(obj)==='[object object]';
};
/**
* 判断此类型是否是array类型
* @param {array} arr 
*/
function isarray(arr){
return object.prototype.tostring.call(arr)==='[object array]';
};
/**
* 深度比较两个对象是否相同
* @param {object} olddata 
* @param {object} newdata 
*/
function equalsobj(olddata,newdata){
// 类型为基本类型时,如果相同,则返回true
if(olddata===newdata)return true;
if(isobject(olddata)&&isobject(newdata)&&object.keys(olddata).length === object.keys(newdata).length){
// 类型为对象并且元素个数相同
// 遍历所有对象中所有属性,判断元素是否相同
for (const key in olddata) {
if (olddata.hasownproperty(key)) {
if(!equalsobj(olddata[key],newdata[key]))
// 对象中具有不相同属性 返回false
return false;
}
}
}else if(isarray(olddata)&&isarray(olddata)&&olddata.length===newdata.length){
// 类型为数组并且数组长度相同
for (let i = 0,length=olddata.length; i <length; i++) {
if(!equalsobj(olddata[i],newdata[i]))
// 如果数组元素中具有不相同元素,返回false
return false;
}
}else{
// 其它类型,均返回false
return false;
}
// 走到这里,说明数组或者对象中所有元素都相同,返回true
return true;
};

测试:

var oldarr = [1,2,
[
{
name:"张三",
age:11,
}
],
{
name:'李四',
age:21,
em:[
{
address:'邯郸',
phone:'123'
},
{
address:'北京',
phone:234
}
]
}
];
var newarr = [1,2,
[
{
name:"张三",
age:11
}
],
{
name:'李四',
age:21,
em:[
{
address:'邯郸',
phone:'123'
},
{
address:'北京',
phone:234
}
]
}
];
console.log(equalsobj(oldarr,newarr));

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。