在JavaScript中展平由嵌套元素分组的数组

问题描述 投票:1回答:2

我有一个棘手的问题......我有一个如下所示的数组:

[ 
  [ [ 'Attribute1', 'Attribute1Synonym1' ], [ 'Attribute2' ] ],
  [ [ 'Attribute3' ] ],
  [ [ 'Attribute2' ] ] 
]

我的结果应该是:

[
  'Attribute1 Attribute2',
  'Attribute1Synonym1 Attribute2',
  'Attribute3',
  'Attribute2'
]

棘手的是:

结果数组必须按子子数组进行分组

至关重要的是,第一个索引是数组(3)的数组(2)的数组(1),我希望通过级别3(数组(3))将数组展平,结果应该是每个可能的组合上层。

在级别2(第一个索引)是一个带有('Attribute1'和'Attribute1Synonym1')的数组,所以结果应该是:

'Attribute1 Attribute2'和'Attribute1Synonym1 Attribute2'

'Attribute2'来自上层

如果第2级['Attribute2']的第二个索引也有多个索引,例如['Attribute2Synonym5'],结果应为:

'Attribute1 Attribute2''Attribute1Synonym1 Attribute2' 'Attribute1 Attribute2Synonym5''Name1Synonym1 Attribute2Synonym5'

等等...

javascript arrays group-by nested
2个回答
2
投票

这与你提供的示例相反,但我猜它对于更复杂的数组是脆弱的:

const deep = [ [ [ 'Attribute1', 'Attribute1Synonym1' ], [ 'Attribute2' ] ],
[ [ 'Attribute3' ] ],
[ [ 'Attribute2' ] ] ];
const flat = [];

deep.forEach(element => {
  const left = element[0];
  const right = element[1];
  left.forEach(leftElement => {
    if(right){
      right.forEach(rightElement => {
        flat.push(leftElement + ' ' + rightElement);
      });
    } else {
      flat.push(leftElement);
    }
  })
});

1
投票

也许是这样的:

var input_arr=[ [ [ 'Attribute1', 'Attribute1Synonym1' ], [ 'Attribute2' ] ],
  [ [ 'Attribute3' ] ],
  [ [ 'Attribute2' ] ] ];
var output_arr=[];
for(var key1 in input_arr){
	var sub_input_arr=input_arr[key1];
	for(var key2 in sub_input_arr){
		var sub_sub_input_arr=sub_input_arr[key2];
         for(var key3 in sub_sub_input_arr){
         	 output_arr.push(sub_sub_input_arr[key3]);
         }
	}
}
console.log(output_arr);
© www.soinside.com 2019 - 2024. All rights reserved.