Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据JavaScript数组中的条件拆分值_Javascript_Jquery_Underscore.js_Lodash - Fatal编程技术网

根据JavaScript数组中的条件拆分值

根据JavaScript数组中的条件拆分值,javascript,jquery,underscore.js,lodash,Javascript,Jquery,Underscore.js,Lodash,请看下面的代码或这个 这将产生以下输出: [ "{ [Dim1].[Mem1].&[1], [Dim1].[Mem1].&[5] }", "{ [Dim2].[Mem1].&[2], [Dim2].[Mem1].&[77] }", "{ [Dim2].[Mem1].[All].Child }", "{ [Dim3].[Mem1].&[1] }" ] [ "{ [Dim1].[Mem1].&[1], [Dim1].[Mem1].&[

请看下面的代码或这个

这将产生以下输出:

[
"{ [Dim1].[Mem1].&[1], [Dim1].[Mem1].&[5] }", 
"{ [Dim2].[Mem1].&[2], [Dim2].[Mem1].&[77] }", 
"{ [Dim2].[Mem1].[All].Child }", 
"{ [Dim3].[Mem1].&[1] }"
]
[

"{ [Dim1].[Mem1].&[1], [Dim1].[Mem1].&[5] }" , 
"{ [Dim2].[Mem1].&[2], [Dim2].[Mem1].&[77] }", 
"{ [Dim2].[Mem1].[All].Child }", 
"{ [Dim3].[Mem1].&[1] }",
"{[Measures].[M11], [Measures].[M1], [Measures].[M2]}"
]
以上代码使用的是lodash库。它查看数组并按
”和“
拆分值,然后按结果数组的第0个索引对数据进行分组

这段代码运行良好,它正在做它应该做的事情

现在考虑一个场景,其中输入数组没有“代码>”和“<”/代码>。在这种情况下,我希望将输入按

进行拆分。
然后对值进行分组。是否可以通过修改上述代码来达到预期的结果?或者可以根据输入值进行条件拆分吗

var arrTwo = ["[Dim1].[Mem1].&[1]",
              "[Dim2].[Mem1].&[2]",
              "[Dim1].[Mem1].&[5]",
              "[Dim2].[Mem1].&[77]",
              "[Measures].[M11]",
              "[Dim2].[Mem1].[All].Child",
              "[Dim3].[Mem1].&[1]"],
              "[Measures].[M1]",
              "[Measures].[M2]";
预期输出:

[
"{ [Dim1].[Mem1].&[1], [Dim1].[Mem1].&[5] }", 
"{ [Dim2].[Mem1].&[2], [Dim2].[Mem1].&[77] }", 
"{ [Dim2].[Mem1].[All].Child }", 
"{ [Dim3].[Mem1].&[1] }"
]
[

"{ [Dim1].[Mem1].&[1], [Dim1].[Mem1].&[5] }" , 
"{ [Dim2].[Mem1].&[2], [Dim2].[Mem1].&[77] }", 
"{ [Dim2].[Mem1].[All].Child }", 
"{ [Dim3].[Mem1].&[1] }",
"{[Measures].[M11], [Measures].[M1], [Measures].[M2]}"
]

我建议在
groupBy
回调中使用正则表达式,而不是
split

var res = _.chain(arrTwo)
    .groupBy(function(x) {
        return x.match(/.+?\.&|[^.]+\./)[0]
    })
    .map(function (x) {
        return "{ " + x.join(", ") + " }";
    })
    .value();
这似乎产生了预期的结果:


该正则表达式首先尝试将所有内容匹配到(包括)
&
。如果失败(即字符串中没有
&
),它将返回并尝试匹配“一些非点和一个点”。找到的匹配项用作
groupBy
键。

为什么输入数据的格式竟然是这样?你有办法了解它形成的方式吗?@Cerbrus:谢谢你的回复。你能告诉我更多关于“为什么输入数据的格式竟然是这样”的信息吗?你的意思是为什么数据的格式是[XXX].[YYY].&[ZZZ]?这就是我的意思,是的。你能改变接收数据的格式吗?另外,您希望结果是什么样的?@Cerbrus:我无法更改输入数据的格式。数据来自另一个服务(SSAS多维数据集)。我在原来的问题中增加了预期的结果。我可以使用两个函数得到结果,第一个函数我将把值除以“&”,第二个函数我将把值除以“.”。谢谢您的快速回复。这看起来不错。你能给我解释一下正则表达式是如何工作的吗。我理解剩下的部分,但不理解正则表达式在做什么。@Brown\u Dynamite:添加了一个解释。