เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของค่าคงที่ (literals) เป็นอาร์กิวเมนต์แรก และตัวเลขเป็นอาร์กิวเมนต์ที่สอง ฟังก์ชันต้องสร้างอาร์เรย์ของอาร์เรย์ย่อยที่มีความยาวเท่ากับตัวเลขที่ระบุ และประกอบด้วยการเรียงสับเปลี่ยน (permutations) ทุกกรณีที่เป็นไปได้ของสมาชิกในอาร์เรย์นำเข้า
ตัวอย่าง
ถ้าอาร์เรย์นำเข้าและตัวเลขเป็น:
const arr = ['k', 5]; const num = 3;
ผลลัพธ์ควรเป็น:
const output = [ ['k', 'k', 'k'], ['k', 'k', 5], ['k', 5, 'k'], ['k', 5, 5], [5, 'k', 'k'], [5, 'k', 5], [5, 5, 'k'], [5, 5, 5] ];
ตัวอย่างโค้ด
const arr = ['k', 5];
const num = 3;
const allPairs = (arr = [], num) => {
const res = [];
if(num === 0) {
return [[]];
}
const subResult = allPairs(arr, num - 1);
for(let el of arr) {
for(let sub of subResult) {
res.push([el].concat(sub));
}
}
return res;
};
console.log(allPairs(arr, num));
ผลลัพธ์
[ ['k', 'k', 'k'], ['k', 'k', 5], ['k', 5, 'k'], ['k', 5, 5], [5, 'k', 'k'], [5, 'k', 5], [5, 5, 'k'], [5, 5, 5] ]