Thep Excel

.flatten() – ลดมิติของอาร์เรย์แบบซ้อน

.flatten() เป็นตัวลดมิติของ nested array ให้กลายเป็นอาร์เรย์เดียว สะดวกมากเวลาต้องประมวลผลข้อมูลซับซ้อนจาก API หรือ database ที่มีโครงสร้างแบบซ้อนๆ

={{ $json.arrayField.flatten() }} {{ $json.arrayField.flatten(depth) }}

By ThepExcel AI Agent
16 December 2025

Function Metrics


Popularity
6/10

Difficulty
3/10

Usefulness
6/10

Syntax & Arguments

={{ $json.arrayField.flatten() }} {{ $json.arrayField.flatten(depth) }}

Argument Type Required Default Description
arrayField array Yes Nested array ที่ต้องการทำให้เรียบ เข้าถึงผ่าน $json.fieldName
depth number Optional Infinity จำนวนระดับลึกที่ต้องการ flatten ถ้าไม่ระบุจะแบนทั้งหมด (default: Infinity)

How it works

รวมข้อมูลจากฐานข้อมูลหลายชั้น

ดึงข้อมูลจากตารางที่มีความสัมพันธ์ แล้ว flatten เพื่อได้ข้อมูลแบบเรียบ

ประมวลผล JSON แบบซ้อน

เมื่อได้รับ JSON response ที่มีโครงสร้างซ้อนๆ ให้ flatten เป็นอาร์เรย์เดียว

Examples

ตัวอย่างที่ 1: Flatten อาร์เรย์พื้นฐานใน Set Node
{{ $json.items.flatten() }}
ฟังก์ชัน .flatten() จะแบนอาร์เรย์ที่ซ้อนกันหลายชั้นให้เป็นแถวเดียว ไม่ว่าลึกแค่ไหนก็ออกมาเป็นแถวเดียว ใช้ใน Set Node ได้เลยโดยไม่ต้องเขียน JavaScript
n8n Formula:

={{ $json.items.flatten() }}

Result:

[1, 2, 3, 4, 5, 6, 7]

ตัวอย่างที่ 2: Flatten กำหนดระดับเฉพาะ
{{ $json.categories.flatten(1) }}
เมื่อระบุ depth = 1 ก็แบนแค่ 1 ระดับเท่านั้น ส่วนลึกกว่านั้นก็ยังคงซ้อนอยู่ เหมาะสำหรับกรณีที่ต้องการความ flexible และไม่ต้องแบนทั้งหมด
n8n Formula:

={{ $json.categories.flatten(1) }}

Result:

[1, [2, 3], 4, [5, 6]]

ตัวอย่างที่ 3: Flatten ข้อมูลจาก API หลาย groups
{{ $json.groups.map(g => g.items).flatten() }}
ส่วนตัวผมเห็นกรณีนี้บ่อยมากในการทำงาน – ดึง items จากทุก groups ด้วย map() แล้ว flatten ให้เป็นรายการเดียว ทำให้ workflow สะอาดและเข้าใจง่ายครับ
n8n Formula:

={{ $json.groups.map(g => g.items).flatten() }}

Result:

[1, 2, 3, 4, 5, 6]

ตัวอย่างที่ 4: ใช้ใน IF Node เพื่อตรวจสอบจำนวนรายการ
{{ $json.allItems.flatten().length > 10 }}
ใช้ .flatten() ร่วมกับ .length ใน IF Node เพื่อตรวจสอบว่าจำนวนรายการรวมทั้งหมดมากกว่า 10 หรือไม่ ช่วยใน routing ของ workflow
n8n Formula:

={{ $json.allItems.flatten().length > 10 }}

Result:

true

FAQs

.flatten() จะเปลี่ยนอาร์เรย์ต้นฉบับหรือไม่?

ไม่เลยครับ .flatten() คืนค่าอาร์เรย์ใหม่ ส่วนอาร์เรย์ต้นฉบับยังคงเหมือนเดิม เป็นการ non-destructive เสียด้วย ปลอดภัยในการใช้

ระบุ depth = 0 จะเกิดอะไร?

ถ้าระบุ depth = 0 ก็ไม่มีการแบนเลย อาร์เรย์จะคงเหมือนเดิม ใช้เฉพาะเมื่อต้องการแบนแต่ไม่ได้ ตัวอักษรจริงๆ

ใช้ .flatten() เมื่อไหร่ในการทำงาน?

ใช้เมื่อมี nested array ที่ต้องการแปลงเป็นอาร์เรย์เดียว เช่น ดึงข้อมูลจาก API ที่มีโครงสร้างซ้อนกัน หรือต้องประมวลผลข้อมูลจากหลาย groups/categories ให้เป็นรายการเดียว เหมาะใช้ใน Set Node เนื่องจากง่ายและไม่ต้องเขียน JavaScript

ต่างอย่างไรระหว่าง .flatten() กับ .map() + concatenate?

ผมมักเปรียบเทียบ .flatten() ว่าเป็นวิธีเร็วและสะอาดกว่า Map + concatenate .flatten() ใช้เมื่อต้องการแบนเนื้อหา ส่วน .map() ใช้เมื่อต้องแปลงค่าของแต่ละรายการ บางครั้งใช้ทั้งสองร่วมกันได้

Resources & Related

Additional Notes

.flatten() ลดมิติของ nested array (อาร์เรย์แบบซ้อน) ให้เรียบเป็นอาร์เรย์เดียว ง่ายๆ คือเอาของที่ซ้อนกันหลายชั้น เช่น [[1, 2], [3, [4, 5]]] มาจัดให้เรียบเป็น [1, 2, 3, 4, 5] ได้เลย ตัวฟังก์ชันนี้ยืดหยุ่นมากเพราะคุณสามารถกำหนดระดับความลึก (depth) ได้ ไม่จำเป็นต้องแบนให้สุดทั้งหมด

ที่เจ๋งคือใช้ในการจัดการข้อมูลจากการดึง API ที่มี nested array หลายชั้น คุณสามารถใช้ .flatten() ใน Set Node เลย ไม่ต้องเขียน JavaScript ยุ่งๆ ทำให้ workflow ง่ายและเร็วกว่า ถ้าต้องการเฉพาะการแบนบางระดับ ก็ใช้ depth parameter บอกระดับที่ต้องการได้

ส่วนตัวผมใช้ .flatten() บ่อยมากเวลาทำ workflow ที่ต้องดึงข้อมูลจากหลาย groups หรือ categories แล้วรวมเป็นรายการเดียว เช่น ดึง orders จากทุก customers แล้ว flatten ให้เป็นรายการเดียว สะดวกชั้นเอก

Leave a Reply

Your email address will not be published. Required fields are marked *