2 回答

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊
我正在自己的應(yīng)用程序中編寫代碼,以完全按照您的要求進(jìn)行操作。下面的代碼有效,但我懷疑它不是最有效的方法。因此,請(qǐng)不要在沒有等待至少幾天讓更有經(jīng)驗(yàn)的人發(fā)布更好的答案或添加批評(píng)此答案的評(píng)論的情況下接受此答案。
訣竅是查詢 cy(cytoscape.js 核心對(duì)象)以查找僅包含具有給定 id 的節(jié)點(diǎn)的“集合對(duì)象”,然后查詢集合對(duì)象以查看它是否為空。如果該節(jié)點(diǎn)不存在,你cy.add()它。如果節(jié)點(diǎn)確實(shí)存在,則調(diào)用node.data()集合對(duì)象來更新它。
function updateGraph(g) { // g is the output from JSON.parse(), containing graph from server
gg = g; // save pointer to g, for console debugging
// Import nodes from server graph
for (const sn of g.nodes) { // sn = node as represented on the server
var node = cy.$id(sn.id) // node = cytoscape.js's representation of node
if (node.empty()) {
node = cy.add({group: 'nodes', data: {
id: sn.id,
label: sn['display-name'], // peculiar to my application
parent: sn.memberOf // peculiar to my application
/* . . . and whatever other data you want to copy to the cytoscape.js graph . . . */
}});
node.addClass(sn.class);
} else {
/* Update `node` with data from `sn`.*/
node.data( /* your overriding data goes here */ );
}
}
}
var gg; // We save the last graph dict from the server here so we can look at
// it in the Chrome debugger even after updateGraph() returns.
gg當(dāng)然,該變量不是必需的,但我發(fā)現(xiàn)它對(duì)于查看 Chrome 調(diào)試器中發(fā)生的事情是必不可少的。
在您的應(yīng)用程序中,您可以O(shè)bject.assign()在調(diào)用node.data(). 這將比我上面的代碼更簡(jiǎn)單、更有效,其中來自源的數(shù)據(jù)具有與 cytoscape.js 預(yù)期的鍵不同的鍵。

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊
//Node from source 1 => "id": "1", "name": "1", "param1": 100;
var xNode={"id": "1", "name": "1", "param1": 100}
//Node from source 2 => "id": "1", "name": "1", "param2": 200;
var yNode={"id": "1", "name": "1", "param2": 200}
// finalNode=Object.assign({},xNode,yNode)
var finalNode={...xNode,...yNode}
console.log('merge Obj:'+JSON.stringify(finalNode))
添加回答
舉報(bào)