เราต้องเขียนฟังก์ชันที่รับอาร์เรย์ 1 มิติเป็นอาร์กิวเมนต์ตัวแรก และตัวเลข n เป็นอาร์กิวเมนต์ตัวที่สอง และเราต้องทำ n ซับอาร์เรย์ภายในอาร์เรย์แม่ (ถ้าเป็นไปได้) และแบ่งองค์ประกอบเข้าไปตามลำดับ
** ถ้าอาร์เรย์มี 9 องค์ประกอบ และเราขอทำ 4 ซับอาร์เรย์ การแบ่ง 2 ตัวต่อซับอาร์เรย์จะได้ 5 ซับอาร์เรย์ และ 3 ตัวจะได้ 3 ซับอาร์เรย์ ดังนั้นในกรณีแบบนี้เราต้อง fallback ไปที่ระดับต่ำสุดที่ใกล้ที่สุด (3 ในกรณีนี้) เพราะเงื่อนไขคือกระจายจำนวนองค์ประกอบเท่ากันในแต่ละซับอาร์เรย์ ยกเว้นตัวสุดท้ายในบางกรณีพิเศษ
ตัวอย่างเช่น:
// หากอาร์เรย์อินพุตคือ: const arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']; // และตัวเลขคือ 2 // ผลลัพธ์ควรเป็น: const output = [ ['A', 'B', 'C', 'D', 'E'], ['F', 'G', 'H', 'I'] ];
มาเขียนโค้ดสำหรับฟังก์ชันนี้กัน:
ตัวอย่างโค้ด
const arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'];
const splitArray = (arr, rows) => {
const itemsPerRow = Math.ceil(arr.length / rows);
return arr.reduce((acc, val, ind) => {
const currentRow = Math.floor(ind / itemsPerRow);
if (!acc[currentRow]) {
acc[currentRow] = [val];
} else {
acc[currentRow].push(val);
}
return acc;
}, []);
};
console.log(splitArray(arr, 2));
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็นดังนี้:
[ ['A', 'B', 'C', 'D', 'E'], ['F', 'G', 'H', 'I'] ]