2017-09-23 96 views
-1

我的目標是將相同的顏色分配給特定對象中的所有事件。我的對象如下所示:將多個值添加到對象中的某個鍵js

var hConfig = [ 
       { 
        label: "A", 
        criteria: ["Event0", "Event1"], 
        field: "evt" 
       }, 
       { 
        label: "B", 
        criteria: ["Event2", "Event3"], 
        field: "evt" 
       }, 
       { 
        label: "C", 
        criteria: ["Event4", "Event5", "Event6"], 
        field: "evt" 
       } 
      ]; 

因此,屬於標籤的所有條件都應該具有相同的顏色。這項作業的功能是:

 function highlightRegex (highlightConfig) { 
      // we will return an array of regex objects 
      var i; 
      var hl; 
      for (i = 0; i < highlightConfig.length; i++) { 
       hl = highlightConfig[i]; 
       logger.info("hl object", hl); 
       hl.re = new RegExp(hl.criteria, "im"); 
      } 
     } 

      function highlight (event, highlightConfig) { 
       // we will return the index if there is a match and -1 otherwise 
       var i; 
       var hl; 
       for (i = 0; i < highlightConfig.length; i++) { 
        hl = highlightConfig[i]; 
        if (hl.re.test(event[hl.field])) { 
         return i; 
        } 
       } 
       return -1; 
      } 

對於每一個數據,當事件名稱與一個在標準,我們指定一種顏色。

resultHighlight = highlight(value, hConfig); 
value.evtColor = getColor(resultHighlight); 

現在,如果我只爲標準密鑰傳遞一個值,此功能就完美了。

criteria: "Event1" 

但如果我必須在標準鍵傳遞多個事件的名稱,然後它打破,並且不指定顏色的任何事件名稱。我應該如何將這些條件作爲一個值的數組來讀取,並確保它讀取正確?

回答

1

因爲RegeExp需要一個字符串而不是數組,所以您必須自己創建一個字符串。

有點像的是:

var criteriaString = '(' + hl.criteria.join(')|(') + ')'; 
hl.re = new RegExp(criteriaString , "im"); 

這應陣列["Event4", "Event5", "Event6"]轉換爲以下字符串:(Event4)|(Event5)|(Event6),這對於任一或EVENT4或Event5 Event6正則表達式。

+0

是的,這是一個問題。此解決方案完美運作。謝謝 :) – user2128

相關問題