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>
相关推荐
Nan_Shu_6145 分钟前
学习:Sass
javascript·学习·es6
x***J34819 分钟前
Python多线程爬虫
开发语言·爬虫·python
m***D28625 分钟前
Python网络爬虫实战案例
开发语言·爬虫·python
保持低旋律节奏35 分钟前
C++——C++11特性
开发语言·c++·windows
WYiQIU40 分钟前
面了一次字节前端岗,我才知道何为“造火箭”的极致!
前端·javascript·vue.js·react.js·面试
qq_3168377541 分钟前
uniapp 观察列表每个元素的曝光时间
前端·javascript·uni-app
小夏同学呀43 分钟前
在 Vue 2 中实现 “点击下载条码 → 打开新窗口预览 → 自动唤起浏览器打印” 的功能
前端·javascript·vue.js
芳草萋萋鹦鹉洲哦43 分钟前
【vue】导航栏变动后刷新router的几种方法
前端·javascript·vue.js
zero13_小葵司1 小时前
JavaScript性能优化系列(八)弱网环境体验优化 - 8.3 数据预加载与缓存:提前缓存关键数据
javascript·缓存·性能优化
ID_180079054731 小时前
基于 Python 的淘宝商品详情数据结构化解析:SKU、价格与库存字段提取
开发语言·数据结构·python