สมมติว่าเรามีอาร์เรย์ดังนี้:
const arr = [ [1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7] ];
อาร์เรย์นี้จะเป็นเมทริกซ์สี่เหลี่ยมจัตุรัสเสมอ
เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์นี้และสร้างอาร์เรย์ใหม่โดยการนำองค์ประกอบมาต่อกันแบบเกลียวเข้าไปจนถึงจุดกึ่งกลาง (Snail trail)
ดังนั้น ผลลัพธ์สำหรับอาร์เรย์ข้างต้นควรเป็น:
const output = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
เราจะแก้ปัญหานี้โดยใช้ Recursion
ตัวอย่าง
const arr = [
[1, 2, 3, 4],
[12, 13, 14, 5],
[11, 16, 15, 6],
[10, 9, 8, 7]
];
const spiralForm = arr => {
return arr.length > 1 ?
arr.splice(0, 1)[0]
.concat(spiralForm(arr[0].map((c, i) => {
return arr.map(r => r[i]);
})
.reverse())) :
arr[0];
};
console.log(spiralForm(arr));
ผลลัพธ์
โค้ดนี้จะแสดงผลลัพธ์ดังต่อไปนี้บนคอนโซล:
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]