Giả sử chúng ta có n mảng riêng biệt của các ký tự đơn lẻ. Chúng ta cần viết một hàm JavaScript nhận tất cả các mảng đó.
Hàm sẽ xây dựng tất cả các chuỗi có thể mà:
- chứa đúng một chữ cái từ mỗi mảng
- không chứa bất kỳ ký tự lặp lại nào (vì các mảng có thể có phần tử chung)
Với mục đích của bài toán này, chúng ta sẽ xem xét ba mảng này, nhưng chúng ta sẽ viết hàm sao cho nó hoạt động tốt với số lượng mảng biến đổi:
const arr1 = [a,b,c,d]; const arr2 = [e,f,g,a]; const arr3 = [m, n, o, g, k];
Ví dụ
Mã thực hiện:
const arr1 = ['a','b','c','d'];
const arr2 = ['e','f','g','a'];
const arr3 = ['m', 'n', 'o', 'g', 'k'];
const allCombinations = (...arrs) => {
let res = [];
const reduced = arrs.reduce((acc, b) => acc.reduce((r, v) => {
return r.concat(b.map(el => {
return [].concat(v, el);
}))
}, []));
res = reduced.filter(el => new Set(el).size === el.length);
return res.map(el => el.join(' '));
};
console.log(allCombinations(arr1, arr2, arr3));
Kết quả
Kết quả trong console:
[ 'a e m', 'a e n', 'a e o', 'a e g', 'a e k', 'a f m', 'a f n', 'a f o', 'a f g', 'a f k', 'a g m', 'a g n', 'a g o', 'a g k', 'b e m', 'b e n', 'b e o', 'b e g', 'b e k', 'b f m', 'b f n', 'b f o', 'b f g', 'b f k', 'b g m', 'b g n', 'b g o', 'b g k', 'b a m', 'b a n', 'b a o', 'b a g', 'b a k', 'c e m', 'c e n', 'c e o', 'c e g', 'c e k', 'c f m', 'c f n', 'c f o', 'c f g', 'c f k', 'c g m', 'c g n', 'c g o', 'c g k', 'c a m', 'c a n', 'c a o', 'c a g', 'c a k', 'd e m', 'd e n', 'd e o', 'd e g', 'd e k', 'd f m', 'd f n', 'd f o', 'd f g', 'd f k', 'd g m', 'd g n', 'd g o', 'd g k', 'd a m', 'd a n', 'd a o', 'd a g', 'd a k' ]