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

การสร้างการรวมทั้งหมดจาก n อาร์เรย์ที่มี m องค์ประกอบด้วย JavaScript

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่สร้างการรวม (combinations) จาก n อาร์เรย์ ซึ่งแต่ละอาร์เรย์มี m องค์ประกอบ

ตัวอย่าง: พิจารณาข้อมูลนี้:

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

3 ซับอาร์เรย์ มีจำนวนองค์ประกอกต่างกัน

สิ่งที่เราต้องการคือการได้ทุกการรวมโดยการนำหนึ่งรายการจากแต่ละอาร์เรย์

ตัวอย่าง:

0,0,0 // item 0 จาก array 0, item 0 จาก array 1, item 0 จาก array 2
0,0,1
0,0,2
0,1,0
0,1,1
0,1,2
0,2,0
0,2,1
0,2,2
... และอื่นๆ

ถ้าจำนวนอาร์เรย์คงที่ จะเขียน hard-code ได้ง่าย แต่จำนวนอาร์เรย์อาจเปลี่ยนแปลงได้:

const arr1 = [[0,1], [0,1]];
const arr2 = [[0,1,3,4], [0,1], [0], [0,1]];

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

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

ผลลัพธ์ในคอนโซลจะเป็น:

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