Computer >> Máy Tính >  >> Lập trình >> Javascript

Tạo kết hợp từ n mảng với m phần tử trong JavaScript


Chúng tôi được yêu cầu viết một hàm JavaScript để tạo các kết hợp từ n số mảng với m số phần tử trong chúng.

Ví dụ -

Hãy xem xét dữ liệu này -

const arr = [
   [0,1],
   [0,1,2,3],
   [0,1,2]
]

3 mảng con, với một số phần tử khác nhau trong đó.

Những gì chúng tôi muốn làm là lấy tất cả các kết hợp bằng cách kết hợp một mục từ mỗi mảng.

Ví dụ -

0,0,0 // item 0 from array 0, item 0 from array 1, item 0 from array 2
0,0,1
0,0,2
0,1,0
0,1,1
0,1,2
0,2,0
0,2,1
0,2,2

Và như vậy.

Nếu số lượng mảng đã được cố định, sẽ dễ dàng thực hiện việc triển khai mã hóa cứng. Nhưng số lượng mảng có thể khác nhau -

const arr1 = [[0,1], [0,1]];
const arr2 = [[0,1,3,4], [0,1], [0], [0,1]];

Ví dụ

Mã cho điều này sẽ là -

const arr = [
   [0,1],
   [0,1,2,3],
   [0,1,2]
]
const combineAll = (array) => {
   const res = [];
   let max = array.length−1;
   const helper = (arr, i) => {
      for (let j=0, l=array[i].length; j<l; j++) {
         let copy = arr.slice(0);
         copy.push(array[i][j]);
         if (i==max)
         res.push(copy);
         else
         helper(copy, i+1);
      };
   };
   helper([], 0);
   return res;
};
console.log(combineAll(arr));

Và đầu ra trong bảng điều khiển sẽ là -

[
   [ 0, 0, 0 ], [ 0, 0, 1 ],
   [ 0, 0, 2 ], [ 0, 1, 0 ],
   [ 0, 1, 1 ], [ 0, 1, 2 ],
   [ 0, 2, 0 ], [ 0, 2, 1 ],
   [ 0, 2, 2 ], [ 0, 3, 0 ],
   [ 0, 3, 1 ], [ 0, 3, 2 ],
   [ 1, 0, 0 ], [ 1, 0, 1 ],
   [ 1, 0, 2 ], [ 1, 1, 0 ],
   [ 1, 1, 1 ], [ 1, 1, 2 ],
   [ 1, 2, 0 ], [ 1, 2, 1 ],
   [ 1, 2, 2 ], [ 1, 3, 0 ],
   [ 1, 3, 1 ], [ 1, 3, 2 ]
]