2017-09-23 8 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); 

基準キーの値を1つだけ渡すと、これは完全に機能します。

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

関連する問題