将多个值添加到对象js中的键

时间:2017-09-23 19:04:54

标签: javascript json

我的目标是为特定对象中的所有事件指定相同的颜色。我的对象看起来像:

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);

但是如果我必须在条件键中传递多个事件名称,那么它会中断,并且不会为任何事件名称指定颜色。我应该如何将标准作为值数组读取并确保它正确读取?

1 个答案:

答案 0 :(得分:1)

由于RegeExp需要字符串而不是数组,因此您必须自己制作。

有点像:

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

这应该将数组["Event4", "Event5", "Event6"]转换为以下字符串:(Event4)|(Event5)|(Event6),它是Event4或Event5或Event6的正则表达式。