เราต้องเขียนฟังก์ชัน chunk() ที่รับอาร์เรย์ arr ของสตริง/ตัวเลขเป็นอาร์กิวเมนต์ตัวแรก และตัวเลข n เป็นอาร์กิวเมนต์ตัวที่สอง
เราต้องคืนค่าอาร์เรย์ของ n ซับอาร์เรย์ โดยแต่ละซับอาร์เรย์มีองค์ประกอบสูงสุด arr.length / n ตัว และการกระจายองค์ประกอบควรเป็นแบบนี้:
องค์ประกอบตัวแรกไปในซับอาร์เรย์ตัวแรก ตัวที่สองไปในตัวที่สอง ตัวที่สามไปในตัวที่สาม ไปเรื่อยๆ เมื่อแต่ละซับอาร์เรย์มีหนึ่งองค์ประกอบแล้ว เรากลับมาเติมองค์ประกอบที่สองในซับอาร์เรย์ตัวแรก อีกครั้ง ทำนองเดียวกันเมื่อทุกซับอาร์เรย์มีสององค์ประกอบแล้ว เราเข้าไปเติมองค์ประกอบที่สามในตัวแรก และไปเรื่อยๆ
ตัวอย่างเช่น:
// หากอาร์เรย์อินพุตคือ: const input = [1, 2, 3, 4, 5, 6]; // ผลลัพธ์ควรเป็น: const output = [ [1, 4], [2, 5], [3, 6] ];
มาเขียนโค้ดสำหรับฟังก์ชันนี้ เราจะใช้ Array.prototype.reduce() บนอาร์เรย์ต้นฉบับเพื่อสร้างอาร์เรย์ที่ต้องการ โค้ดจะเป็นดังนี้:
ตัวอย่างโค้ด
const input = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const chunk = (arr, size) => {
return arr.reduce((acc, val, ind) => {
const subIndex = ind % size;
if (!Array.isArray(acc[subIndex])) {
acc[subIndex] = [val];
} else {
acc[subIndex].push(val);
}
return acc;
}, []);
};
console.log(chunk(input, 4));
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็นดังนี้:
[ [ 1, 5, 9 ], [ 2, 6 ], [ 3, 7 ], [ 4, 8 ] ]