Объединение массивов для сохранения обхода

#javascript #arrays

#javascript #массивы

Вопрос:

У меня есть два массива JavaScript:

var array1 = [[1,2],[3,4],[5,6,7]];

Я хочу, чтобы результат был: [1,3,5],[1,3,6],[1,3,7],[1,4,5],[1,4,6],[1,4,7],[2,3,5],[2,3,6],[2,3,7],[2,4,5],[2,4,6],[2,4,7]

Ответ №1:

Вы можете перебирать каждый элемент каждого отдельного массива. Приведенное ниже решение может работать только для трех вложенных массивов, но если вам нужно решение для работы с переменным числом вложенных массивов, вам может понадобиться рекурсивная функция.

 var array1 = [
  [1, 2],
  [3, 4],
  [5, 6, 7]
];
var outputArrays = [];
array1[0].forEach(function(firstElement) {
  array1[1].forEach(function(secondElement) {
    array1[2].forEach(function(thirdElement) {
      outputArrays.push([firstElement, secondElement, thirdElement]);
    });
  });
});
console.log('output arrays: ',outputArrays);  

Комментарии:

1. это может выполнить arry1, но не может решить arry1 длина изменяется. например , array1 = [[1,2],[3,4],[5,6,7],[8,9],[0,11]] мы не можем, как долго array1 и мы foreach сколько раз.

Ответ №2:

Я нашел лучший ответ на этот вопрос. и я забыл нажать на него. теперь я это сделаю

 var arr = [
  [1,2],
  [3,4],
  [5,6,7]
];
/* what I want is
    [[1],[2]]                                    arr i=0
    [[1,3],[1,4],[2,3],[2,4]]                    arr i=1
    [[1,3,5],[1,3,6],[1,3,7],.....[2,4,7]]       arr i=2
*/
function comarr(arr){
   var narr = [[]];//empty
   for(var i=0;i<arr.length;i  ){
     var barr = [];
     for(var m=0;m<narr.length;m  ){
       for(var n=0;n<arr[i].length;n  ){
         barr.push(narr[m].concat(arr[i][n]))
       }
     }
     narr = barr;
   }
   return narr;
}