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

Làm thế nào để xây dựng một chuỗi không có ký tự lặp lại n danh sách các ký tự riêng biệt? trong JavaScript


Giả sử, chúng ta tách n mảng các ký tự đơn lẻ. Chúng tôi được yêu cầu viết một hàm JavaScript có trong tất cả các mảng đó.

Hàm phải xây dựng tất cả các chuỗi có thể có -

  • chứa chính xác một ký tự từ mỗi mảng

  • không được chứa bất kỳ ký tự lặp lại nào (vì các mảng có thể chứa các phần tử chung)

Đối với mục đích của vấn đề này, chúng tôi sẽ xem xét ba mảng này, nhưng chúng tôi sẽ viết hàm của chúng tôi sao cho nó hoạt động tốt với số lượng mảng thay đổi -

const arr1 = [a,b ,c,d ];
const arr2 = [e,f ,g ,a];
const arr3 = [m, n, o, g, k];

Ví dụ

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

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

Đầu ra

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

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