将图数据排序为列

时间:2019-03-19 16:17:30

标签: javascript graph

我有此数据:

const main = 'a';
const data = [{
  from: 'a',
  to: 'b'
}, {
  from: 'b',
  to: 'c'
}, {
  from: 'c',
  to: 'd'
}, {
  from: 'b',
  to: 'd'
},
 {
   from: 'd',
   to: 'e'
 },
  {
    from: 'a',
    to: 'e'
  }
];

我想对其进行格式化,因此结果类似于:

{
  col1: [b, ""],
  col2: [c, "", ""],
  col3: [d, ""],
  col4: [e]
}

此布局将用于将节点放置到其位置。

图形应该看起来像(抱歉我的绘画技巧很差):

enter image description here

空字符串代表“不可见节点”,我将使用它们将其他节点与路径连接起来。该图将具有固定的节点位置。

我如何实现以上格式?谢谢

1 个答案:

答案 0 :(得分:0)

这是一个快速的示例解决方案。

  • 假设:节点(fromto)的顺序遵循data中遇到它们的顺序
  • 注意:这大约是O(m * n)

    const main = 'a';
    const data = [...];
    
    let order = [];
    let res = {};
    
    data.forEach(i => {
        if (!order.includes(i.from)) {
            order.push(i.from);
            res[i.from] = 0;
        }
        if (!order.includes(i.to)) {
            order.push(i.to);
            res[i.to] = 0;
        }
        for (let temp = order.indexOf(i.from) + 1; temp < order.indexOf(i.to); temp++)
            res[order[temp]]++;
    });
    

您可以从a中删除res,并根据需要更改数据结构,等等。