Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

วิธีสร้างสตริงที่ไม่มีตัวอักษรซ้ำจาก n รายการตัวอักษรแยกกันใน JavaScript


สมมติว่าเรามี n อาร์เรย์แยกกันของตัวอักษรเดี่ยว เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ทั้งหมดนั้นเข้ามา

ฟังก์ชันควรสร้างสตริงที่เป็นไปได้ทั้งหมดที่

  • ประกอบด้วยตัวอักษรเพียงหนึ่งตัวจากแต่ละอาร์เรย์

  • ต้องไม่มีตัวอักษรซ้ำ (เพราะอาร์เรย์อาจมีสมาชิกเหมือนกัน)

เพื่อวัตถุประสงค์ของปัญหานี้ เราจะพิจารณาอาร์เรย์สามอาร์เรย์นี้ แต่เราจะเขียนฟังก์ชันให้ทำงานได้กับจำนวนอาร์เรย์ที่เปลี่ยนแปลงได้

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

ตัวอย่างโค้ด

โค้ดสำหรับการทำงานนี้จะเป็นดังนี้

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

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็นดังนี้

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