在 JavaScript 中判断两个对象是否相等是一个常见的需求。对于判断业务对象是否相等,要考虑两个情形:
1. 有唯一标识属性的(比如说对象里有唯一的 ID),很简单,只需要对比它里面的唯一标识的属性,比如 id
const isEqual = (obj1, obj2) => {
return obj1.id === obj2.id;
};
2. 第一种情况肯定非常简单,不在本文的介绍范围以内,主要介绍第二种,通过递归比较来判断(本文不介绍 JSON.stringify(),这个方法过于简单粗暴,可能会有很多的缺陷):
下面是代码:
function deepEqual(obj1, obj2) {
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 (let key of keys1) {
if (!obj2.hasOwnProperty(key)) {
return false;
}
if (!deepEqual(obj1[key], obj2[key])) {
return false;
}
}
return true;
}
思路:
1. 先判断类型,如果不是对象就直接比较
2. 对象就遍历键并递归比较值
3. 键不同或递归比较值也不同则返回 false
4. 全部键和值都相同则返回 true
当然,ES6 还有更简单的一种方法:
function isEqual(obj1, obj2) {
return Object.keys(obj1).every((key) => obj1[key] === obj2[key]);
}
对每一项进行比较。
文章介绍了在JavaScript中如何深度比较两个对象是否相等,包括递归函数`deepEqual`和ES6的简化版本,重点在于处理复杂对象结构的相等性检查。
1064

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



