Cytoscape.js cy.style().fromJson() 添加而不是替换?

Cytoscape.js cy.style().fromJson() add instead of replace?

我想在 Cytoscape.js 3.1 图表中将样式与配色方案分开。根据http://js.cytoscape.org/#cy.style,我初始化然后添加到cy.style():

var mystyle = [
    {
        "selector": "node",
        "css":
        {
            "border-opacity": 1.0,
            'label': function(ele)
            {
              if(ele.data('Labels_EN')) {return ele.data('Labels_EN')[0];}
              ...
         }, ...
    ];

var bright = [
    {
        "selector": "node",
        "css":
        {"background-color": "white";}
    }];

cy = cytoscape(
    {
        container: mycontainer,
        style: mystyle
    });

cy.style().fromJson(bright).update();

不幸的是,对 cy.style().fromJson() 的调用似乎会自动调用 cy.style().resetToDefault(),因为它删除了现有样式。 如何防止 Cytoscape.js 删除我现有的样式,而是使用 JSON 添加到它?我需要此功能,这样我就不必将完整的样式信息放入我的所有配色方案文件中,这会增加维护难度。

P.S.:作为解决方法,我合并了两个样式文件,如下所示:

function mergeJsonArraysByKey(a1,a2)
{
    let map1 = new Map();
    let map2 = new Map();
    for(i=0;i<a1.length;i++) {if(a1[i].selector) {map1.set(a1[i].selector,a1[i]);}}
    for(i=0;i<a2.length;i++) {if(a2[i].selector) {map2.set(a2[i].selector,a2[i]);}}
    let merged = [];
    map1.forEach((value,key,map) =>
    {
        if(map2.has(key))
        {
            merged.push($.extend(true,{},value,map2.get(key)));
        } else
        {
            merged.push(value);
        }
    });
    map2.forEach((value,key,map) =>
    {
        if(!map1.has(key))
        {
            merged.push(value);
        }
    });
    return merged;
}

function initGraph(container, graph)
{
    let merged = mergeJsonArraysByKey(mystyle,bright);
    cy = cytoscape(
    {
        container: container,
        style: merged
    });
 }

合并 json 而不是附加到样式表。您可以使用 json 做任何您想做的事情,而 cy.style() 只能以特定方式进行修改以防止出现问题。

cy.style().fromJson( sheetA.concat( sheetB ) )