为了账号安全,请及时绑定邮箱和手机立即绑定

在不使用数组映射中的图形的情况下查找循环依赖

在不使用数组映射中的图形的情况下查找循环依赖

胡说叔叔 2021-05-31 12:53:41
我有一个像下面这样的对象:var myMap = {    v1: ['v2', 'v4', 'v5'],    v2: ['x', 'v4', 'y'],    v3: ['v2', 'v4', 'v5'],    v4: ['e', 'v1', 'v5'],    v5: ['v2', 'v4', 'v3'],};我必须找到实体循环图而不将其转换为图形。像输出将如下所示:var myDep = {    v1: {isCyclic: true, cyclicDependents: ['v4']},    v2: {isCyclic: false, cyclicDependents: []},    v3: {isCyclic: true, cyclicDependents: ['v5']},    v4: {isCyclic: true, cyclicDependents: ['v1', 'v5']},    v5: {isCyclic: true, cyclicDependents: ['v4', 'v3']},};我尝试了以下操作:var graph = {  v1: ["v2", "v4", "v5"],  v2: ["x", "v4", "y"],  v3: ["v2", "v4", "v5"],  v4: ["e", "v1", "v5"],  v5: ["v2", "v4", "v3"]};var myDep = {  v1: { isCyclic: false, cyclicDependents: [] },  v2: { isCyclic: false, cyclicDependents: [] },  v3: { isCyclic: false, cyclicDependents: [] },  v4: { isCyclic: false, cyclicDependents: [] },  v5: { isCyclic: false, cyclicDependents: [] }};myDep = Object.keys(graph).reduce((a, b) => {  graph[b] &&graph[b].forEach(d => {  if (graph[d] && ~graph[d].indexOf(b)) {    a[b].isCyclic = true;    a[b].cyclicDependents.push(d);  }});  return a;}, myDep);console.log(myDep);有没有其他方法可以提高它的性能。我认为以迭代方式使用 JSON.stringify 和 try catch 块可能也是一种方法。但我不确定它的性能会更高/更低。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 155 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信