我有两个集Node
和Edge
。
在Edge
中,我有两个字段source
和target
,用于存储与之关联的节点的ID。
节点的ID(存储为i node.id
,edge.source
和edge.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
值。
答案 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] + ')');