使用lodah\handlebar模板或任何其他JS库将javascript数组列表格式化为特定格式
我有一个JavaScript数组,如下所示使用lodah\handlebar模板或任何其他JS库将javascript数组列表格式化为特定格式,javascript,jquery,regex,handlebars.js,lodash,Javascript,Jquery,Regex,Handlebars.js,Lodash,我有一个JavaScript数组,如下所示 var arr = ["[Dim1].[Mem1].&1","[Dim2].[Mem1].&2","[Dim1].[Mem1].&5","[Dim2].[Mem1].&77","[Dim3].[Mem1].&1"] 我想要的:我想要一个这种格式的字符串 { [Dim1].[Mem1].&1, [Dim1].[Mem1].&5 }, { [Dim2].[Mem1].&2,
var arr = ["[Dim1].[Mem1].&1","[Dim2].[Mem1].&2","[Dim1].[Mem1].&5","[Dim2].[Mem1].&77","[Dim3].[Mem1].&1"]
我想要的:我想要一个这种格式的字符串
{
[Dim1].[Mem1].&1, [Dim1].[Mem1].&5
},
{
[Dim2].[Mem1].&2, [Dim2].[Mem1].&77
},
{
[Dim3].[Mem1].&1"]
}
{ Dim1Mem1: [ '[Dim1].[Mem1].&1', '[Dim1].[Mem1].&5' ],
Dim2Mem1: [ '[Dim2].[Mem1].&2', '[Dim2].[Mem1].&77' ],
Dim3Mem1: [ '[Dim3].[Mem1].&1' ] }
我可以通过以下方式做到这一点:
var regExp = /\[(.*?)\]/g;
console.log(_.groupBy(arr, function(currentItem) {
var match, result = "";
while ((match = regExp.exec(currentItem)) !== null) {
result += match[1];
}
return result;
}));
输出
{
[Dim1].[Mem1].&1, [Dim1].[Mem1].&5
},
{
[Dim2].[Mem1].&2, [Dim2].[Mem1].&77
},
{
[Dim3].[Mem1].&1"]
}
{ Dim1Mem1: [ '[Dim1].[Mem1].&1', '[Dim1].[Mem1].&5' ],
Dim2Mem1: [ '[Dim2].[Mem1].&2', '[Dim2].[Mem1].&77' ],
Dim3Mem1: [ '[Dim3].[Mem1].&1' ] }
如果我没有错的话,你给出的解决方案只能识别唯一的项目,但是我如何才能将数据转换成我想要的格式?你还可以解释一下你是如何分割数组的(换句话说,你是基于什么基础创建组的)。@Brown\u Dynamite代码没有得到唯一的值。分组是基于开始和结束方括号内的字符串完成的。@Brown\u Dynamite您在控制台中展开了对象吗?只需单击控制台窗口中对象旁边的小三角形。是的,我单击了。解决方案正在发挥作用。但是你能给我解释一下它是怎么工作的吗?还有什么方法可以在每个组的开始和结束处添加“{”(如我的问题中所示),或者我必须再次循环?RegExp捕获第一个开括号和第一个闭括号之间的任何内容,在while循环的下一次迭代中,它执行相同的操作,但从最后一个闭括号开始。