js来比较两个对象内容有误差异
前言:
封装js方法来比较两个对象内容有误差异。
思路:
通过循环对象的方法,Object.keys,拿到对象后,比较他的内容,根据类型,如果是普通类型,直接比较,如果是引用类型则比较长度与内容。
调用:
!this.deepCompare(obj1[key], obj2[key]
封装方法内容:
// 封装的对象属性对比方法,返回true/falsedeepCompare(obj1, obj2) {// 处理基本类型和null/undefinedif (obj1 === obj2) return true;if (typeof obj1 !== 'object' || obj1 === null ||typeof obj2 !== 'object' || obj2 === null) {return false;}// 获取所有属性键(包括原型链上的可枚举属性)const keys1 = Object.keys(obj1);const keys2 = Object.keys(obj2);// 属性数量不同则对象不同if (keys1.length !== keys2.length) return false;// 检查所有属性for (const key of keys1) {// 确保obj2也有这个属性if (!obj2.hasOwnProperty(key)) return false;const val1 = obj1[key];const val2 = obj2[key];// 如果属性值是数组if (Array.isArray(val1) && Array.isArray(val2)) {// 数组长度不同if (val1.length !== val2.length) return false;// 深度比较数组元素for (let i = 0; i < val1.length; i++) {if (!this.deepCompare(val1[i], val2[i])) return false;}} else if (typeof val1 === 'object' && val1 !== null &&typeof val2 === 'object' && val2 !== null) {// 如果属性值是对象递归比较嵌套对象if (!this.deepCompare(val1, val2)) return false;} else if (val1 !== val2) {// 基本类型直接比较return false;}}return true;}