【问题标题】:findNodesByExample() with Array Go.JS使用 Array Gojs 通过 Example() 查找节点
【发布时间】:2022-01-02 09:24:32
【问题描述】:

我搜索解决方案已经将近 3 个小时了,但没有找到有效的解决方案。

我想在我的对象数组中找到一个与正则表达式匹配的名称。 这个名字在一个数组中,谁在节点中(下面的例子):

[ {
     key: "avidyne_abs_nav",
     fields: [{
                name: "avidyne.abs_nav.A429AVIDYNE"
              }]
} ]

所以,要搜索与我的正则表达式匹配的名称,这是我的代码:

let safe = input.value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
let regex = new RegExp(safe, "i");
myDiagram.findNodesByExample({ key: regex },
                             { fields: function(n) { return n.some(a => { regex.test(a.name) }) } });

当我搜索一个键时,findNodesByExample() 会返回所有与正则表达式匹配的对象。但是对于字段,它返回一个空数组...... 为了创建这个函数,我在Go.JS API doc 后面加上了年龄示例

【问题讨论】:

    标签: javascript gojs


    【解决方案1】:

    我不确定您的输入是什么,但它似乎按我的预期工作:

      function init() {
        var $ = go.GraphObject.make ;  // for conciseness in defining templates
        myDiagram = new go.Diagram("myDiagramDiv");
    
        myDiagram.model = new go.GraphLinksModel(
          [{
            key: "avidyne_abs_nav",
            fields: [{
              name: "avidyne.abs_nav.A429AVIDYNE"
            }]
          }]);
    
    
      } // end init
    
      window.click = function() {
        let safe = "A429AVIDYNE"; //input.value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
        let regex = new RegExp(safe, "i");
        const results = myDiagram.findNodesByExample({ key: regex },
          {
            fields: function (n) {
              return n.some(a => {
                return regex.test(a.name)
              }
              )
            }
          });
        console.log(results.count); // found one node
      }
    

    这会根据与正则表达式匹配的 node.data.fields.name 找到一个节点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多