Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

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

Viết hàm JavaScript tạo tổ hợp từ n mảng với m phần tử mỗi mảng.

Ví dụ dữ liệu:

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

3 mảng con, số phần tử khác nhau. Muốn lấy tất cả tổ hợp bằng cách lấy một phần tử từ mỗi mảng.

Ví dụ: 0,0,0 (phần tử 0 từ mảng 0, phần tử 0 từ mảng 1, phần tử 0 từ mảng 2), 0,0,1, 0,0,2, 0,1,0...

Số mảng có thể thay đổi.

Ví dụ

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

Kết quả

Kết quả in ra console (24 tổ hợp):

[ 
  [ 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 ] 
]