按顺序中不同值的列表拆分Javascript数组中的每个值&;然后把他们分组
我有一个Javascript数组。我想根据某个值拆分数组中的每个值,然后将它们分组 以下是按优先级排序的条件/值,我希望根据这些条件/值在数组中拆分值按顺序中不同值的列表拆分Javascript数组中的每个值&;然后把他们分组,javascript,jquery,underscore.js,handlebars.js,lodash,Javascript,Jquery,Underscore.js,Handlebars.js,Lodash,我有一个Javascript数组。我想根据某个值拆分数组中的每个值,然后将它们分组 以下是按优先级排序的条件/值,我希望根据这些条件/值在数组中拆分值 &第一次按拆分& [All]如果未找到&,则基于[All] 如果未找到基于的拆分的&和[All] 然后我需要将所有按,分组的值连接在一起 我能做到这一切&这里有一个同样的例子 问题:现在我想按下面提到的顺序拆分以下值 & [All].UNKNOWNMEMBER--新添加的条件 [全部] 我附带的小提琴显示以下输出: { [Dim1].[Att]
&
第一次按拆分&
[All]
如果未找到&
,则基于[All]
如果未找到基于
的拆分的&
和[All]
,
分组的值连接在一起
我能做到这一切&这里有一个同样的例子
问题:现在我想按下面提到的顺序拆分以下值
&
[All].UNKNOWNMEMBER
--新添加的条件[全部]
{ [Dim1].[Att].&[001], [Dim1].[Att].&[002] } * { [Dim1].[Att].[All].UNKNOWNMEMBER } * { [Dim3].[Att].[All].Children } * { [Dim4].[Att].[All].Children } * { [M1].[One], [M1].[Two] }
我希望将输出更改为
{ [Dim1].[Att].&[001], [Dim1].[Att].&[002] , [Dim1].[Att].[All].UNKNOWNMEMBER } * { [Dim3].[Att].[All].Children } * { [Dim4].[Att].[All].Children } * { [M1].[One], [M1].[Two] }
当前,当我通过&
拆分[Dim1].[Att].&[001]
时,我得到[Dim1].[Att].&
,但是如果我们在拆分操作后将输出更改为[Dim1].[Att]
,如下图所示,我将得到所需的结果
我不想使用for循环来获得所需的结果。如果您想加入
[All].unknown成员在&
组中,那么您可以在groupBy()
函数中替换此文本?例如:
var res = _.chain(selectionList)
.groupBy(function (x) {
return x.replace("\.\[All\]\.UNKNOWNMEMBER",".&")
.match(/.+?\.&|.+?\.\[All\]|[^.]+\./i)[0];
})
如果您希望数组中的元素也被排序(因此在未知成员
元素之前有&
元素,您可以将其添加到映射()
函数中:
.map(function (x) {
return "{ " + x.sort().join(", ") + " }";
})
小提琴演示:排序和映射
您可以通过自定义排序获得所需的输出,该排序根据拆分条件创建列组
资料来源:
var s = [
"[Dim1].[Att].&[001]",
"[Dim1].[Att].[All].UNKNOWNMEMBER",
"[Dim1].[Att].&[002]",
"[Dim3].[Att].[All].Children",
"[Dim4].[Att].[All].Children",
"[M1].[One]",
"[M1].[Two]"];
// Sort the items.
s.sort(function(a,b){
// Give items a rank based on what we find. 1 is high, 10 is low.
var x = a.indexOf(".&") > -1 ? 0 : 10;
if (x === 10) x = a.indexOf(".[All].UNKNOWNMEMBER") > -1 ? 1 : 10;
if (x === 10) x = a.indexOf(".[All]") > -1 ? 2 : 10;
if (x === 10) x = a.indexOf(".") > -1 ? 3 : 10;
var y = b.indexOf(".&") > -1 ? 0 : 10;
if (y === 10) y = b.indexOf(".[All].UNKNOWNMEMBER") > -1 ? 1 : 10;
if (y === 10) y = b.indexOf(".[All]") > -1 ? 2 : 10;
if (y === 10) y = b.indexOf(".") > -1 ? 3 : 10;
// Sort according to rank.
if (x > y) {
return 1;
} else if (x === y) {
return 0;
} else {
return -1;
}
});
console.log(s);
// Create output for the groups.
var output = "{";
var key = "";
s.map(function(item){
var thisKey = item.substr(0, item.indexOf(".")-1);
if (thisKey !== key) {
if (key !== "") output += "} * ";
output += "{ ";
key = thisKey;
} else {
output += " , "
}
output += item;
});
output += " }";
console.log(output);
输出:
["[Dim1].[Att].&[001]", "[Dim1].[Att].&[002]", "[Dim1].[Att].[All].UNKNOWNMEMBER", "[Dim3].[Att].[All].Children", "[Dim4].[Att].[All].Children", "[M1].[One]", "[M1].[Two]"]
{{ [Dim1].[Att].&[001] , [Dim1].[Att].&[002] , [Dim1].[Att].[All].UNKNOWNMEMBER} * { [Dim3].[Att].[All].Children} * { [Dim4].[Att].[All].Children} * { [M1].[One] , [M1].[Two] }
您好,我们需要更全面地了解这个问题。到目前为止,原始数据似乎应该正常化。@moonwave99:我已经更新了这个问题。我希望它能有所帮助。如果您有任何具体问题,请告诉我