手写全相等函数isEqual
// 判断obj是否为对象
function isObject(obj) {
return (typeof obj === 'object' && obj !== null);
}
//全相等函数
function isEqual(obj1,obj2) {
//如果其中一个不为对象,则判断两个是否严格相等
if (!isObject(obj1) || !isObject(obj2)) {
return obj1 === obj2;
}
// 到了这里说明两个都是对象
// 先判断引用是否相等
if (obj1 === obj2) {
return true;
}
//判断两个对象中的键的个数是否相同
if (Object.keys(obj1).length !== Object.keys(obj2).length) {
return false;
}
// 以obj1 为基准, 递归判断obj1和obj2中的元素是否相等
for (let key in obj1) {
const res = isEqual(obj1[key],obj2[key]);
if (!res) {
return false;
}
}
// 全相等
return true;
}
测试数据
const obj1 = {
a: 100,
b: 'shit',
color: ['red', 'green'],
location: {
city: 'BJ',
region: "CHINA"
}
};
const obj2 = {
a: 100,
b: 'shit',
color: ['red', 'green'],
location: {
city: 'BJ',
region: "CHINA"
}
};
console.log(isEqual(obj1,obj2)); // true