Свести массив, сгруппированный по вложенным элементам в JavaScript - PullRequest
0 голосов
/ 30 августа 2018

У меня каверзный вопрос ... У меня массив выглядит так:

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

Мой результат должен быть:

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

хитрая вещь:

массив результатов должен быть сгруппирован по вложенному массиву

суть в том, что первый индекс - это массив (1) массивов (2) массивов (3) и я хотел бы, чтобы сгладить массив по уровню 3 (массив (3)) и в результате должны быть все возможные комбинации между верхним уровнем.

На уровне 2 (первый индекс) находится массив с ('Attribute1' и 'Attribute1Synonym1') поэтому результат должен быть:

«Атрибут1 Атрибут2» а также 'Attribute1Synonym1 Attribute2'

«Атрибут2» происходит от верхнего уровня

если второй индекс уровня 2 ['Attribute2'] также имеет несколько индексов например ['Attribute2Synonym5'] результат должен быть:

«Атрибут1 Атрибут2» 'Attribute1Synonym1 Attribute2'
'Attribute1 Attribute2Synonym5' 'Attribute1Synonym1 Attribute2Synonym5'

и так далее ...

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Это работает против предоставленного вами примера, но я собираюсь догадаться, что он хрупок по отношению к более сложным массивам:

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);
    }
  })
});
0 голосов
/ 30 августа 2018

Может быть так:

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);
...