全相等函数 isEqual
手写全相等函数 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]);
// 一层层递归比较,只要有一项不同,就中断并返回false
if (!res) {
return false;
}
}
// 递归比较全相等
return true;
}
const obj1 = {
a: 1,
b: {
x: 'aa',
y: 'bb',
z: 'cc'
},
c: [1, 2, 3]
}
const obj2 = {
a: 1,
b: {
x: 'aa',
y: 'bb',
z: 'cc'
},
c: [1, 2, 3]
}
console.log(isEqual(obj1, obj2)); // true
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通