循环哪里我写的只是有一点点不同,怎么就出现不了正确的结果呢?

来源:18-3 题目讲解-2:手写深度比较 isEqual

慕虎6468404

2022-03-17

for (let key in obj1) {
if (obj2[key]) {
const res = isEqual(obj1[key], obj2[key]);
return res;
} else {
return false;
}

//   const res = isEqual(obj1[key], obj2[key]);
//   if (!res) {
//     return false;
//  }

上面的是我写的,下面注释掉的是老师写的。
我判断了一下obj2[key]是否存在,然后返回res结果。如果不存在则直接返回false。
结果是,不能深度对比是否相等。

写回答

2回答

双越

2022-03-18

问题不在于你说的地方。我在这里打印了一下,key 只输出了 a ,没有 b(如下图)。

//img.mukewang.com/szimg/62344ca909fa4ed409900632.jpg

你再顺着这个 bug排查一下。

0
0

双越

2022-03-17

你写一个完整里的例子。第一,函数写全;第二,传入的 obj1 和 obj2 分别是什么

我再来看看

0
1
慕虎6468404
const obj1 = { a: 10, b: { x: 100, y: 200, }, }; const obj2 = { a: 10, b: { x: 1001, y: 200, z: 0, }, }; function isObject(obj) { return typeof obj === "object" && typeof obj !== null; } function isEqual(obj1, obj2) { // 如果el1,和el2都是基础数据类型,则直接比较 if (!isObject(obj1) || !isObject(obj2)) { return obj1 === obj2; } //如果是object或者array,则深入到里面比较。 if (obj1 === obj2) return true; const obj1Keys = Object.keys(obj1); const obj2Keys = Object.keys(obj2); if (obj1Keys.length !== obj2Keys.length) { return false; } for (let key in obj1) { if (obj2[key]) {//如果obj2的key存在 const res = isEqual(obj1[key], obj2[key]); return res; } else { return false; } } return true; } console.log(isEqual(obj1, obj2));
2022-03-18
共1条回复

一天时间高效准备前端技术一面 匹配大厂面试要求

针对时下面试高频考点,帮助新人js面试快速通关

4694 学习 · 1681 问题

查看课程