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

时间:2021-05-25

代码:

/*** 判断此对象是否是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){// 类型为基本类型时,如果相同,则返回trueif(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]))// 对象中具有不相同属性 返回falsereturn 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]))// 如果数组元素中具有不相同元素,返回falsereturn false;}}else{// 其它类型,均返回falsereturn false;}// 走到这里,说明数组或者对象中所有元素都相同,返回truereturn 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));

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

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章