使用lodah \ handlebar模板或任何其他JS库将javascript数组列表格式化为特定格式

时间:2014-04-09 11:46:15

标签: 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, [Dim2].[Mem1].&77
},
{
     [Dim3].[Mem1].&1"]
}

我可以通过以下方式完成此任务:

  1. 遍历数组中的所有项目&然后用。&
  2. 拆分它们
  3. 根据[dim]。[mem]组合创建另一个列表。在我们的例子中,列表将有[Dim3]。[Mem1],[Dim1]。[Mem1],[Dim2]。[Mem1]。
  4. 现在有两个循环 - 一个用于唯一列表中的每个项目,一个用于原始列表中的每个项目&检查项目是否是原始列表包含唯一列表中的当前项目&然后形成字符串。
  5. 是否有借助模板或手柄模板或任何其他JavaScript库实现此目的?

1 个答案:

答案 0 :(得分:1)

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

var regExp = /\[(.*?)\]/g;
console.log(_.groupBy(arr, function(currentItem) {
    var match, result = "";
    while ((match = regExp.exec(currentItem)) !== null) {
        result += match[1];
    }
    return result;
}));

<强>输出

{ Dim1Mem1: [ '[Dim1].[Mem1].&1', '[Dim1].[Mem1].&5' ],
  Dim2Mem1: [ '[Dim2].[Mem1].&2', '[Dim2].[Mem1].&77' ],
  Dim3Mem1: [ '[Dim3].[Mem1].&1' ] }