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>
相关推荐
李迟4 分钟前
Golang实践录:工程框架实践:搭建工程模板
开发语言·后端·golang
纪伊路上盛名在4 分钟前
Kabsch算法的Julia实现
开发语言·算法·julia·序列分析·蛋白质·rmsd
玖玥拾9 分钟前
Lua 基础语法(三) 元表 metatable、元方法、模拟面向对象
开发语言·unity·lua
维天说14 分钟前
Agent会听人话,反而更难管
java·开发语言·人工智能
雪芽蓝域zzs21 分钟前
Vue3 defineProps` / `defineEmits` 是编译器宏,不需要手动 import 导入
前端·javascript·vue.js
whyweplay26 分钟前
Elpis:从Json Schema 到 页面
前端·javascript
会飞的拖把28 分钟前
Python 面向对象编程详解:从类与对象到动态属性方法
开发语言·python
大牧师1 小时前
Nest.js 微服务入门教程
开发语言·javascript·后端·微服务·node.js·nest.js·nest
格林威1 小时前
C# 图像异步落盘存储:基于Channel 配合 ArrayPool 实现异步落盘
开发语言·人工智能·数码相机·机器学习·计算机视觉·c#·视觉检测
软件黑马王子1 小时前
11.缓存池优化:窗口布局
开发语言·前端框架·c#