สมมติว่า เราต้องเขียนฟังก์ชันที่รับอาร์เรย์ arr ของ string / number literals เป็นอาร์กิวเมนต์แรก และ number n เป็นอาร์กิวเมนต์ที่สอง
เราจำเป็นต้องส่งคืนอาร์เรย์ของ n อาร์เรย์ย่อย ซึ่งแต่ละอาร์เรย์มีองค์ประกอบ arr.length / n มากที่สุด และการกระจายตัวขององค์ประกอบควรเป็นแบบนี้ −
- องค์ประกอบแรกจะอยู่ในอาร์เรย์ย่อยที่หนึ่ง ที่สองในวินาที ที่สามในสาม และอื่นๆ
- เมื่อเรามีองค์ประกอบเดียวในแต่ละอาร์เรย์ย่อย เราจะเริ่มด้วยการเติมองค์ประกอบที่สองในอาร์เรย์ย่อยแรกอีกครั้ง
- ในทำนองเดียวกัน เมื่ออาร์เรย์ย่อยทั้งหมดมีสององค์ประกอบหลังจากนั้น เราจะเติมองค์ประกอบที่สามในอาร์เรย์แรกและต่อไปเรื่อยๆ
ตัวอย่างเช่น −
หากอาร์เรย์อินพุตเป็น −
const input = [656, 756, 5345, 67, 43, 76, 54, 768, 34];
และจำนวน n คือ 3 ดังนั้นผลลัพธ์ควรเป็น −
const output = [ [ 656, 67, 54 ], [ 756, 43, 768 ], [ 5345, 76, 34 ] ];
เราจะใช้วิธี Array.prototype.reduce() แทนอาร์เรย์เดิมเพื่อสร้างอาร์เรย์ที่ต้องการ
ตัวอย่าง
ต่อไปนี้เป็นรหัส -
const input = [656, 756, 5345, 67, 43, 76, 54, 768, 34]; const divideArray = (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(divideArray(input, 3));
ผลลัพธ์
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ในคอนโซล -
[ [ 656, 67, 54 ], [ 756, 43, 768 ], [ 5345, 76, 34 ] ]