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>
相关推荐
HYCS1 小时前
用pixi.js实现fabric.js(六):从线性代数的角度理解编辑器交互
前端·javascript·canvas
晨曦中的暮雨1 小时前
Golang速通(Javaer版)
java·开发语言·后端·golang
小小编程路1 小时前
Python 还有容器类型互转、进制转换、字符编码转换
开发语言·windows·python
you45801 小时前
学成在线--day02 CMS前端开发(含Vue基础知识得回顾)
前端·javascript·vue.js
想吃火锅10051 小时前
【leetcode】1.两数之和js版
javascript·算法·leetcode
qeen871 小时前
【C++】类与对象之类的默认成员函数(二)
android·c语言·开发语言·c++·笔记·学习
xiaofeichaichai1 小时前
虚拟 DOM
前端·javascript·vue.js
CRMEB系统商城2 小时前
CRMEB多商户系统(Java)v2.3公测版发布
java·开发语言·人工智能·小程序·开源·php
动能小子ohhh2 小时前
DocForge平台的设计与开发--文件上传接口的实现
开发语言·人工智能·python·langchain·ocr·fastapi
满天星83035772 小时前
【Qt】信号和槽(二) (自定义信号和槽)
开发语言·数据库·qt