@antv/algorithm
Version:
graph algorithm
79 lines (78 loc) • 2.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.uniqueId = exports.getOutEdgesNodeId = exports.getNeighbors = exports.getEdgesByNodeId = void 0;
/**
* 获取指定节点的所有邻居
* @param nodeId 节点 ID
* @param edges 图中的所有边数据
* @param type 邻居类型
*/
var getNeighbors = function getNeighbors(nodeId, edges, type) {
if (edges === void 0) {
edges = [];
}
var currentEdges = edges.filter(function (edge) {
return edge.source === nodeId || edge.target === nodeId;
});
if (type === 'target') {
// 当前节点为 source,它所指向的目标节点
var neighhborsConverter_1 = function neighhborsConverter_1(edge) {
return edge.source === nodeId;
};
return currentEdges.filter(neighhborsConverter_1).map(function (edge) {
return edge.target;
});
}
if (type === 'source') {
// 当前节点为 target,它所指向的源节点
var neighhborsConverter_2 = function neighhborsConverter_2(edge) {
return edge.target === nodeId;
};
return currentEdges.filter(neighhborsConverter_2).map(function (edge) {
return edge.source;
});
}
// 若未指定 type ,则返回所有邻居
var neighhborsConverter = function neighhborsConverter(edge) {
return edge.source === nodeId ? edge.target : edge.source;
};
return currentEdges.map(neighhborsConverter);
};
/**
* 获取指定节点的出边
* @param nodeId 节点 ID
* @param edges 图中的所有边数据
*/
exports.getNeighbors = getNeighbors;
var getOutEdgesNodeId = function getOutEdgesNodeId(nodeId, edges) {
return edges.filter(function (edge) {
return edge.source === nodeId;
});
};
/**
* 获取指定节点的边,包括出边和入边
* @param nodeId 节点 ID
* @param edges 图中的所有边数据
*/
exports.getOutEdgesNodeId = getOutEdgesNodeId;
var getEdgesByNodeId = function getEdgesByNodeId(nodeId, edges) {
return edges.filter(function (edge) {
return edge.source === nodeId || edge.target === nodeId;
});
};
/**
* 生成唯一的 ID,规则是序号 + 时间戳
* @param index 序号
*/
exports.getEdgesByNodeId = getEdgesByNodeId;
var uniqueId = function uniqueId(index) {
if (index === void 0) {
index = 0;
}
var random1 = "".concat(Math.random()).split('.')[1].substr(0, 5);
var random2 = "".concat(Math.random()).split('.')[1].substr(0, 5);
return "".concat(index, "-").concat(random1).concat(random2);
};
exports.uniqueId = uniqueId;