Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.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
使用lodah\handlebar模板或任何其他JS库将javascript数组列表格式化为特定格式_Javascript_Jquery_Regex_Handlebars.js_Lodash - Fatal编程技术网

使用lodah\handlebar模板或任何其他JS库将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,

我有一个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, [Dim2].[Mem1].&77
},
{
     [Dim3].[Mem1].&1"]
}
{ Dim1Mem1: [ '[Dim1].[Mem1].&1', '[Dim1].[Mem1].&5' ],
  Dim2Mem1: [ '[Dim2].[Mem1].&2', '[Dim2].[Mem1].&77' ],
  Dim3Mem1: [ '[Dim3].[Mem1].&1' ] }
我可以通过以下方式做到这一点:

  • 循环遍历数组中的所有项,然后使用拆分&
  • 基于[dim].[mem]组合创建另一个列表。在本例中,列表将有[Dim3].[Mem1],[Dim1].[Mem1],[Dim2].[Mem1]
  • 现在有两个循环-一个用于唯一列表中的每个项目,另一个用于原始列表中的每个项目&检查项目是否为原始列表,是否包含唯一列表中的当前项目,然后形成字符串
  • 在模板、把手模板或任何其他JavaScript库的帮助下,是否可以实现这一点?

    您可以使用和正则表达式对元素进行分组

    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循环的下一次迭代中,它执行相同的操作,但从最后一个闭括号开始。