前端面试题,如何比较两个对象是否相等?
定义两个数据如下,比较是否相等
const obj1 = {
name: "John",
age: 30,
address: {
street: "123 Main St",
city: "New York",
},
};
const obj2 = {
name: "John2",
age: 30,
address: {
street: "123 Main St",
city: "New York",
},
};
利用typeof判断,结果如下,不可行
typeof obj1 == "Object"
typeof obj2 == "Object"
JavaScript遗留的问题,typeof null == "Object"
所以以上方式不可行
我们需要逐层递归判断数据是否相等,实现方式如下:
function equal(obj1, obj2) {
if (typeof obj1 !== typeof obj2) {
return false;
}
if (Object.keys(obj1).length !== Object.keys(obj2).length) {
return false;
}
for (let key in obj1) {
let isObj = isObject(obj1[key]) && isObject(obj2[key]);
if (
(isObj && !equal(obj1[key], obj2[key])) ||
(!isObj && obj1[key] !== obj2[key])
) {
return false;
}
}
return true;
}