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

时间:2018-08-30 14:25:20

标签: javascript arrays group-by nested

我有一个棘手的问题...我有一个看起来像这样的数组:

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

我的结果应该是:

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

棘手的是:

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

关键是,第一个索引是array(1)of arrays(2)of arrays(3) 而且我想按3级(array(3))来展平数组,结果应该是较高级之间的所有可能组合。

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

“ Attribute1 Attribute2” 和 'Attribute1Synonym1 Attribute2'

“ Attribute2”来自上层

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

“ Attribute1 Attribute2” 'Attribute1Synonym1 Attribute2'
'Attribute1 Attribute2Synonym5' 'Attribute1Synonym1 Attribute2Synonym5'

以此类推...

2 个答案:

答案 0 :(得分: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 :(得分: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);