前言:
封装js方法来比较两个对象内容有误差异。
思路:
通过循环对象的方法,Object.keys,拿到对象后,比较他的内容,根据类型,如果是普通类型,直接比较,如果是引用类型则比较长度与内容。
调用:
!this.deepCompare(obj1[key], obj2[key]
封装方法内容:
// 封装的对象属性对比方法,返回true/false
deepCompare(obj1, obj2) {
// 处理基本类型和null/undefined
if (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;
}
622




被折叠的 条评论
为什么被折叠?



