js判断对象是否循环引用

解题思路

    1. 首先要判断当前传入的是一个对象否,是则对当前对象进行遍历,否则返回false
    1. 如果是对象,先将当前对象保存到数组中,然后对对象进行遍历
    1. 判断对象的每个值是否是一个对象 如果不是的话就跳出当前循环
    1. 如果是的话,判断对象的每个值是否存在数组中,如果存在表示是循环引用
    1. 反之则进行递归 将当前的对象的值和保存对象的数组传入递归函数
javascript 复制代码
 <script>
    const a = {}
    const b = {
      name: 'zs',
      info: {
        age: 18,
        self: a
      }
    }
    a.b = b
    console.log(a)


    function hasLoop(obj) {
      function findLoop(target, src) {
        const source = [...src, target]
        for (const key in target) {
          if (typeof target[key] !== 'object') continue

          if (source.includes(target[key]) || findLoop(target[key], source)) return true
        }
      }

      return typeof obj === "object" ? findLoop(obj, []) : false
    }

    console.log(hasLoop(a))


    /**
     * 思路
     * 1. 首先要判断当前传入的是一个对象否,是则对当前对象进行遍历,否则返回false
     * 2. 如果是对象,先将当前对象保存到数组中,然后对对象进行遍历
     * 3. 判断对象的每个值是否是一个对象 如果不是的话就跳出当前循环
     * 4. 如果是的话,判断对象的每个值是否存在数组中,如果存在表示是循环引用
     * 5. 反之则进行递归 将当前的对象的值和保存对象的数组传入递归函数
    */
  </script>
相关推荐
码农阿豪17 分钟前
飞算JavaAI:专为Java开发者打造的智能编程革命
java·开发语言·microsoft
Q_Q196328847521 分钟前
python基于Hadoop的超市数据分析系统
开发语言·hadoop·spring boot·python·django·flask·node.js
暮乘白帝过重山23 分钟前
负载因子(Load Factor) :哈希表(Hash Table)中的一个关键性能指标
开发语言·数据结构·哈希算法·散列表·负载因子·暮乘白帝过重山
山中月侣24 分钟前
java集合 之 多列集合
java·开发语言·经验分享·学习方法
MediaTea43 分钟前
Python 第三方库:Requests(HTTP 客户端)
开发语言·网络·python·网络协议·http
uhakadotcom1 小时前
将next.js的分享到twitter.com之中时,如何更新分享卡片上的图片?
前端·javascript·面试
小小愿望1 小时前
解锁前端新技能:让JavaScript与CSS变量共舞
前端·javascript·css
二闹1 小时前
JS调用高德地图标注地点-简单呐
前端·javascript
鴆川傲1 小时前
web前端第二次作业
前端·javascript·css
ruokkk2 小时前
一个困扰我多年的Session超时Bug,被我的新AI搭档半天搞定了
javascript·后端·架构