Javascript 使用cytoscape.js选择其属性(数组类型)包含特定值的节点

Javascript 使用cytoscape.js选择其属性(数组类型)包含特定值的节点,javascript,cytoscape.js,Javascript,Cytoscape.js,我目前正在可视化一个网络,其中节点具有列表类型的属性,例如: {"data": {"name": "b", "go": ["c", "d", "f"], "id": "n0"}, "group": "nodes"}, {"data": {"name": "a", "go": ["a", "b", "c"], "id": "n1"}, "group": "nodes"}, {"data": {"target": "n0", "source": "n1", "id": "e1"}, "group":

我目前正在可视化一个网络,其中节点具有列表类型的属性,例如:

{"data": {"name": "b", "go": ["c", "d", "f"], "id": "n0"}, "group": "nodes"},
{"data": {"name": "a", "go": ["a", "b", "c"], "id": "n1"}, "group": "nodes"},
{"data": {"target": "n0", "source": "n1", "id": "e1"}, "group": "edges"}
是否可以使用cytoscape.js选择列表属性(“示例中的go”)包含特定值的所有节点

比如:

cy.elements('node[go.contains("b")]')
将选择节点n1


提前非常感谢

备选方案:如果您不需要使用选择器,可以使用筛选函数并将属性保留为数组:
cy.elements().filter(function(){return this.data('go').indexOf('foo')>=0;})

在选择器中执行数组包含检查可能代价高昂,因为它们最常用于样式表中——只要状态发生更改,就需要应用样式表。目前,对于现有的选择器和当前的数据结构,无法实现您的建议

您可能会发现使用对象比使用数组更容易。对象可以是简单的name:true对,比如
go:{foo:true,bar:true}
。由于
undefined
是错误的,因此只需定义数组中的正大小写即可

这样,您就可以使用一个简单的选择器,如
节点[go\\.foo]
(或者
节点[?go\\.foo]
,如果您想更明确一点的话)。在您自己的代码中进行检查(例如,
node.data('go.foo')?“have':“nots”
)更简单、更便宜。

这样做时,我会得到一个错误“选择器”节点[Sources.bb]无效”。我怎样才能防止呢?