.flatten() เป็นตัวลดมิติของ nested array ให้กลายเป็นอาร์เรย์เดียว สะดวกมากเวลาต้องประมวลผลข้อมูลซับซ้อนจาก API หรือ database ที่มีโครงสร้างแบบซ้อนๆ
={{ $json.arrayField.flatten() }} {{ $json.arrayField.flatten(depth) }}
={{ $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) |
ดึงข้อมูลจากตารางที่มีความสัมพันธ์ แล้ว flatten เพื่อได้ข้อมูลแบบเรียบ
เมื่อได้รับ JSON response ที่มีโครงสร้างซ้อนๆ ให้ flatten เป็นอาร์เรย์เดียว
{{ $json.items.flatten() }}={{ $json.items.flatten() }}
[1, 2, 3, 4, 5, 6, 7]
{{ $json.categories.flatten(1) }}={{ $json.categories.flatten(1) }}
[1, [2, 3], 4, [5, 6]]
{{ $json.groups.map(g => g.items).flatten() }}={{ $json.groups.map(g => g.items).flatten() }}
[1, 2, 3, 4, 5, 6]
{{ $json.allItems.flatten().length > 10 }}={{ $json.allItems.flatten().length > 10 }}
true
ไม่เลยครับ .flatten() คืนค่าอาร์เรย์ใหม่ ส่วนอาร์เรย์ต้นฉบับยังคงเหมือนเดิม เป็นการ non-destructive เสียด้วย ปลอดภัยในการใช้
ถ้าระบุ depth = 0 ก็ไม่มีการแบนเลย อาร์เรย์จะคงเหมือนเดิม ใช้เฉพาะเมื่อต้องการแบนแต่ไม่ได้ ตัวอักษรจริงๆ
ใช้เมื่อมี nested array ที่ต้องการแปลงเป็นอาร์เรย์เดียว เช่น ดึงข้อมูลจาก API ที่มีโครงสร้างซ้อนกัน หรือต้องประมวลผลข้อมูลจากหลาย groups/categories ให้เป็นรายการเดียว เหมาะใช้ใน Set Node เนื่องจากง่ายและไม่ต้องเขียน JavaScript
ผมมักเปรียบเทียบ .flatten() ว่าเป็นวิธีเร็วและสะอาดกว่า Map + concatenate .flatten() ใช้เมื่อต้องการแบนเนื้อหา ส่วน .map() ใช้เมื่อต้องแปลงค่าของแต่ละรายการ บางครั้งใช้ทั้งสองร่วมกันได้
.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 ให้เป็นรายการเดียว สะดวกชั้นเอก