根据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:添加了一个解释。