我的目标是为特定对象中的所有事件指定相同的颜色。我的对象看起来像:
json.loads(request.body)
因此,属于标签的所有标准应该是相同的颜色。这样做的功能是:
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);
但是如果我必须在条件键中传递多个事件名称,那么它会中断,并且不会为任何事件名称指定颜色。我应该如何将标准作为值数组读取并确保它正确读取?
答案 0 :(得分:1)
由于RegeExp需要字符串而不是数组,因此您必须自己制作。
有点像:
var criteriaString = '(' + hl.criteria.join(')|(') + ')';
hl.re = new RegExp(criteriaString , "im");
这应该将数组["Event4", "Event5", "Event6"]
转换为以下字符串:(Event4)|(Event5)|(Event6)
,它是Event4或Event5或Event6的正则表达式。