打印编号映射到文档而不是ID

时间:2016-09-06 08:00:00

标签: javascript arrays dictionary graph hashmap

我有两个集NodeEdge

Edge中,我有两个字段sourcetarget,用于存储与之关联的节点的ID。

节点的ID(存储为i node.idedge.sourceedge.target)不是很易读,所以我想要做的是打印节点集和一组边但不是打印它们的ID,我想打印一个从1开始的索引。

所以如果我有3个节点,我的结果应该是

  

节点集= {n1,n2,n3}

如果我有两条边,其中第一条链接在n1和n2之间,第二条链接在n2和n3之间,我想输出

  

边缘集= {e1 =(n1,n2),e2 =(n2,n3)}

如果我不关心将id更改为更易读的索引,我可以用

打印边缘
edges = edges.map((edge, index) => 'e' + (index + 1) + ' = (' + edge.source + ', ' + edge.target + ')');
console.log('Set of edges = {' + edges.join(', ') + '}');

的节点
nodes = nodes.map((node, index) => 'n' + (index + 1));
console.log('Set of nodes = {' + nodes.join(', ') + '}');

我的猜测是我必须在打印边缘之前创建节点的哈希映射,因此我确信每个边缘的source-id和target-id都将被转换为正确的节点编号/索引。

修改

节点和边缘非常简单

const nodeSchema = new Schema({});
const edgeSchema = new Schema({ source: Schema.Types.ObjectId, target: Schema.Types.ObjectId});

因此,他们不会保留除自动创建的_id之外的任何其他信息,并且边缘使用节点保存对节点的引用。 _id值。

1 个答案:

答案 0 :(得分:0)

我想这可行

const hashmap = {};

nodes.map((node, idx) => {
  hashmap[node.id] = 'n' + (idx + 1);
});

nodes = Object.keys(hashmap).map(key => hashmap[key]);
edges = edges.map((edge, idx) => 'e' + (idx + 1) + '=(' + hashmap[edge.source] + ', ' + hashmap[edge.target] + ')');