2016-12-12 4 views
-2

У меня есть массив в таком виде ...Рекурсивный уникальный метод javascript?

  • обр [itemDescription]
    • [0] someValue1
    • [1] someotherValue1
  • обр [itemDescription]
    • [0] someValue2
    • [1] someotherValue2
  • обр [itemDescription]
    • [0] someValue3
    • [1] someotherValue3
  • ....

Теперь я бы как генерировать все возможные варианты, когда у меня есть массив с первым элементом, объединенным с другими элементами, второй элемент объединяет d с другими элементами и т. д. Как:

  • [someValue1] [someValue2] [someValue3]
  • [someValue1] [someotherValue2] [someValue3]
  • [someValue1] [someotherValue2] [someotherValue3]
  • ....

, чтобы подвести итог, для на следующие входного массива:

[[11, 12], [21, 22], [31, 32]]; 

Мне нужно получить выходной массив, такой как

[[11, 21, 31], [11, 21, 32], [11, 22, 31], [11, 22, 32], [12, 21, 31], [12, 21, 32], [12, 22, 31], [12, 22, 32]]; 

Может ли кто-нибудь помочь мне, как бы я сделал это в javascript?

Большое вам спасибо!

+0

Что вы пытаетесь до сих пор? Положите какой-нибудь код, или вы получите downvotes. – TigOldBitties

+0

Добро пожаловать в SO. Пожалуйста, посетите [помощь] и возьмите [тур], чтобы узнать, что и как спросить. СОВЕТ: усилие и код сообщения – mplungjan

+0

Два вложенных цикла 'for'. – nicovank

ответ

0

Я предлагаю это решение. Для того, чтобы решить, чтобы выбрать индекс входного массива к югу ИСИДА массива, я использую одномерный массив по модулю глобального индекса:

var input = [[11, 12], [21, 22], [31, 32]]; 
 
var dim = Math.pow(2, input.length); 
 
var output = new Array(dim); 
 
output.fill(0); 
 
input.forEach((x,i) => { 
 
    var limit = dim/Math.pow(2, i+1); 
 
    output.forEach((y,j,arr) => { 
 
    var index = Math.floor((j+1)/limit) % 2; 
 
    if (i === 0) 
 
     arr[j] = [x[index]]; 
 
    else 
 
     arr[j].push(x[index]); 
 
    }); 
 
}); 
 
console.log(output);

Смежные вопросы