将节点名称映射到链接

时间:2018-11-12 11:16:16

标签: javascript

这是我的数据,我正在尝试将节点的名称映射到链接的源和目标。

var x = {
  "nodes": [
    {
      "name": "Decision 3a"
    },
    {
      "name": "Req 1"
    },
    {
      "name": "Req 3c"
    },
    {
      "name": "Cloud Services"
    }
  ],
  "links": [
    {
      "source": "0",
      "target": "3",
      "value": 100
    },
    {
      "source": "4",
      "target": "2",
      "value": 100
   }
  ]
};

对于我的可视化,我希望对象看起来像这样-

var x = {
      "nodes": [
        {
          "name": "Decision 3a"
        },
        {
          "name": "Req 3"
        },
        {
          "name": "Req 3c"
        },
        {
          "name": "Req 3b"
        }
      ],
      "links": [
        {
          "source": "Decision 3a",
          "target": "Req 3c",
          "value": 100
        },
        {
          "source": "Cloud Services",
          "target": "Req 1",
          "value": 100
       }
      ]
    };

我尝试将id添加到节点,然后将它们映射,但在那种情况下,id保留在节点对象中。

1 个答案:

答案 0 :(得分:0)

您需要遍历links数组中的每个对象,并从节点数组中获取索引,并将该值分配给links数组。

我希望以下代码能够解决问题

var x = {
  "nodes": [
    {
      "name": "Decision 3a"
    },
    {
      "name": "Req 1"
    },
    {
      "name": "Req 3c"
    },
    {
      "name": "Req 4"
    },
    {
      "name": "Cloud Services"
    }
  ],
  "links": [
    {
      "source": "0",
      "target": "3",
      "value": 100
    },
    {
      "source": "4",
      "target": "2",
      "value": 100
   }
  ]
};

x.links.forEach(o => {
 let name = x.nodes[parseInt(o.source)].name;
 o["source"] = name;
})

console.log("output",x)