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 分钟前
Linux---序列化与反序列化
java·开发语言
敲代码的嘎仔11 分钟前
JavaWeb零基础学习Day6——JDBC
java·开发语言·sql·学习·spring·单元测试·maven
闭着眼睛学算法13 分钟前
【双机位A卷】华为OD笔试之【排序】双机位A-银行插队【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
java·c语言·javascript·c++·python·算法·华为od
Drift_Dream18 分钟前
深入浅出 requestAnimationFrame:让动画更流畅的利器
javascript
GIS瞧葩菜22 分钟前
【无标题】
开发语言·前端·javascript·cesium
彭于晏爱编程30 分钟前
关于表单,别做工具库舔狗
前端·javascript·面试
拉不动的猪33 分钟前
什么是二义性,实际项目中又有哪些应用
前端·javascript·面试
烟袅40 分钟前
LeetCode 142:环形链表 II —— 快慢指针定位环的起点(JavaScript)
前端·javascript·算法
Ryan今天学习了吗1 小时前
💥不说废话,带你上手使用 qiankun 微前端并深入理解原理!
前端·javascript·架构
Predestination王瀞潞1 小时前
Java EE开发技术(第六章:EL表达式)
前端·javascript·java-ee