美文网首页
JS 循环依赖检测

JS 循环依赖检测

作者: 菜鸡前端 | 来源:发表于2021-10-03 09:56 被阅读0次

在一些业务中,我们需要处理依赖关系,比如循环依赖。下面的代码实现了循环依赖的检测,检测到存在循环依赖时,终止检测流程,并且打印依赖链。缺点是没有检测出所有的循环依赖,后续加以改进:

<script>

  function checkDpes(list) {
    const depMap = {};

    const findNode = function (key) {
      return list.find(it => it.key === key)
    }

    const findDeps = function (key, deps, path) {
      deps.forEach(it => {
        if (key === it) {
          throw new Error("circle dep for " + [key, ...path, it].join(' => '))
        }
        if (depMap[key].indexOf(it) === -1) {
          depMap[key].push(it)
          const node = findNode(it)
          if (node.deps && node.deps.length) {
            findDeps(key, node.deps, [...path, it])
          }
        }
      })
    }

    list.forEach(it => {
      depMap[it.key] = []
      findDeps(it.key, it.deps || [], [])
    });

    return depMap;
  }

  // 测试用例
  var list = [
    {
      key: 'A',
      deps: ['B', 'C', 'D']
    },
    {
      key: 'B',
      deps: ['C']
    },
    {
      key: 'C',
      deps: ['D']
    },
    {
      key: 'D',
      deps: ['B']
    },
    {
      key: 'E',
    }
  ]
  var res = checkDpes(list)
  console.log(res)
</script>

相关文章

  • JS 循环依赖检测

    写代码时,难免会出现循环依赖,出现这种情况主要原因是:代码结构设计的不好。下面的代码实现了循环依赖的检测,检测到存...

  • Spring-IOC-循环依赖检测与Bean的创建

    Spring容器的循环依赖检测 Spring容器循环依赖包括:构造器循环依赖和setter循环依赖。 1- 构造器...

  • AssetBundle循环引用(依赖)检测

    如果AssetBundle打包使用的是自动分类,而不是手工设置的方式,几乎不可避免的是导致打出来的包会有循环引用。...

  • vue.js - 循环渲染

    vue.js 循环渲染 [TOC] 一、简介 vue.js 的循环渲染是依赖于 v-for 指令,它能够根据 vu...

  • js事件循环

    js 是单线程的, js 的异步事件就是依赖于事件循环机制 事件循环 首先,我们来解释下事件循环是个什么东西: 就...

  • JavaScript 04 (do...while循环/for

    js循环,js循环嵌套,js do...while循环,js的for循环,js中的break,js中的contin...

  • Node.js之循环依赖

    在Node.js中有可能会出现循环依赖的问题,在此做一个简单的记录 假如有一个模块A: 假如有一个模块B: 我们在...

  • Spring 是如何解决循环依赖的?

    Spring 是如何解决循环依赖的? 循环依赖: Spring 循环依赖有三种情况: 构造器的循环依赖,这种依赖 ...

  • webpack 学习总结

    webpack 干嘛用的? index.js 依赖 a.js,a.js 依赖 b.js,b.js 依赖 c.js,...

  • 好程序员web前端教程分享js中的模块化二

    好程序员web前端教程接下来将为大家继续分享js中的模块化知识 4.循环依赖 就是a依赖b,b依赖a,对于不同的规...

网友评论

      本文标题:JS 循环依赖检测

      本文链接:https://www.haomeiwen.com/subject/riuvnltx.html