subset_reversed_smaller = {
const nodes = data.nodes;
const links = data.links;
const topic = nodes.filter(d => d.labels[0] === "Topic").slice(0,1);
const authors = nodes.filter(d => d.labels[0] === "Author").slice(0,30);
const orgs = nodes.filter(d => d.labels[0] === "Organization").slice(0,30);
const twitters = nodes.filter(d => d.labels[0] === "TwitterAccount").slice(0,30);
const tweets = nodes.filter(d => d.labels[0] === "Tweet");
const pubs = nodes.filter(d => d.labels[0] === "Publication");
const trials = nodes.filter(d => d.labels[0] === "ClinicalTrial");
const products = nodes.filter(d => d.labels[0] === "Product");
const coreNodes = authors.concat(orgs, twitters);
const coreNodeIds = coreNodes.map(d => d.id);
const otherNodes = tweets.concat(pubs, trials, products);
function checkId(a, v) {
return a.some(av => v === av);
};
function getConnectionsReverse(nodeArr) {
var connections = [];
for (let i in links) {
if (nodeArr.id === links[i].source) {
connections.push(links[i].target)
}
}
return connections;
}
function findNodes(nodeArr) {
var connectedNodes = []
for (let i in nodeArr) {
var connectedNodeIds = getConnectionsReverse(nodeArr[i]);
for (let e in otherNodes) {
if (checkId(connectedNodeIds, otherNodes[e].id)) {
connectedNodes.push(otherNodes[e])
}
}
}
return connectedNodes;
}
const candidateNodes = topic.concat(authors, orgs, twitters, findNodes(authors), findNodes(orgs), findNodes(twitters));
const nodeIds = candidateNodes.map(d => d.id);
var candidateLinks = [];
for (let i in links) {
if (checkId(nodeIds, links[i].source) && checkId(nodeIds, links[i].target)) {
candidateLinks.push(links[i])
}
}
const filteredLinks = candidateLinks.filter(d => d.label != "isRelatedTo");
const filteredNodes = Object.values(
filteredLinks.reduce(function(t, v) {
if (!t[v.source]) {
t[v.source] = candidateNodes.filter(o => o.id === v.source)[0];
}
if (!t[v.target]) {
t[v.target] = candidateNodes.filter(o => o.id === v.target)[0];
}
return t;
}, {})
);
return { nodes: filteredNodes, links: filteredLinks };
}