请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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。
结果是,不能深度对比是否相等。

正在回答 回答被采纳积分+3

2回答

双越 2022-03-18 17:11:24

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

https://img1.sycdn.imooc.com//szimg/62344ca909fa4ed409900632.jpg

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

0 回复 有任何疑惑可以回复我~
双越 2022-03-17 21:24:13

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

我再来看看

0 回复 有任何疑惑可以回复我~
  • 提问者 慕虎6468404 #1
    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 08:12:26
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信