---
title: .flatten() – ลดมิติของอาร์เรย์แบบซ้อน
url: https://www.thepexcel.com/functions/n8n/array-functions/flatten-n8n/
type: function-explainer
program: n8n
syntax: "{{ $json.arrayField.flatten() }} {{ $json.arrayField.flatten(depth) }}"
date: 2025-12-16
updated: 2025-12-25
scores:
  popularity: 6
  difficulty: 3
  usefulness: 6
---

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

> .flatten() เป็นตัวลดมิติของ nested array ให้กลายเป็นอาร์เรย์เดียว สะดวกมากเวลาต้องประมวลผลข้อมูลซับซ

## คำอธิบาย

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

## Syntax

```excel
{{ $json.arrayField.flatten() }} {{ $json.arrayField.flatten(depth) }}
```

**Variant**

```excel
$json.nestedData.flatten()
```

ใช้เป็น method เพื่อ flatten $json.nestedData ทั้งหมด

**Variant**

```excel
$json.nestedData.flatten(2)
```

flatten เพียง 2 ระดับลึก

## Arguments

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

## เคสการใช้งาน

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

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

_เหมาะกับ:_ data-flattening

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

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

_เหมาะกับ:_ json-processing

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: Flatten อาร์เรย์พื้นฐานใน Set Node

```excel
{{ $json.items.flatten() }}
```

**ผลลัพธ์:** `[1, 2, 3, 4, 5, 6, 7]`

ฟังก์ชัน .flatten() จะแบนอาร์เรย์ที่ซ้อนกันหลายชั้นให้เป็นแถวเดียว ไม่ว่าลึกแค่ไหนก็ออกมาเป็นแถวเดียว ใช้ใน Set Node ได้เลยโดยไม่ต้องเขียน JavaScript

### 2. ตัวอย่างที่ 2: Flatten กำหนดระดับเฉพาะ

```excel
{{ $json.categories.flatten(1) }}
```

**ผลลัพธ์:** `[1, [2, 3], 4, [5, 6]]`

เมื่อระบุ depth = 1 ก็แบนแค่ 1 ระดับเท่านั้น ส่วนลึกกว่านั้นก็ยังคงซ้อนอยู่ เหมาะสำหรับกรณีที่ต้องการความ flexible และไม่ต้องแบนทั้งหมด

### 3. ตัวอย่างที่ 3: Flatten ข้อมูลจาก API หลาย groups

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

**ผลลัพธ์:** `[1, 2, 3, 4, 5, 6]`

ส่วนตัวผมเห็นกรณีนี้บ่อยมากในการทำงาน - ดึง items จากทุก groups ด้วย map() แล้ว flatten ให้เป็นรายการเดียว ทำให้ workflow สะอาดและเข้าใจง่ายครับ

### 4. ตัวอย่างที่ 4: ใช้ใน IF Node เพื่อตรวจสอบจำนวนรายการ

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

**ผลลัพธ์:** `true`

ใช้ .flatten() ร่วมกับ .length ใน IF Node เพื่อตรวจสอบว่าจำนวนรายการรวมทั้งหมดมากกว่า 10 หรือไม่ ช่วยใน routing ของ workflow

## หมายเหตุเพิ่มเติม

- ผมแนะนำให้ใช้ .flatten() ใน Set Node มากกว่า Code Node ช่วยให้ workflow สะอาดและเข้าใจง่ายขึ้น

- ถ้า array ลึกมาก ระบุ depth parameter ให้ชัดเจน เช่น .flatten(2) แทนการแบนทั้งหมด ช่วยประหยัด CPU และหลีกเลี่ยง overhead

- ใช้ .flatten() ร่วมกับ .map() เมื่อต้องการทั้งแปลงค่าและแบน เช่น $json.groups.map(g => g.items).flatten() ทำให้ code ชัดเจน

- ถ้าต้อง filter ข้อมูลหลังจาก flatten ใช้ .flatten().filter(...) จะรวมและกรองพร้อมกัน แบบนี้ประสิทธิภาพดี

## คำถามที่พบบ่อย

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

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

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

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

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

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

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

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

## ฟังก์ชันที่เกี่ยวข้อง

- [map – แปลงแต่ละรายการในอาร์เรย์ (transform elements)](https://www.thepexcel.com/functions/n8n/array-functions/map-n8n/)
- [filter – กรองรายการจากอาร์เรย์ตามเงื่อนไข](https://www.thepexcel.com/functions/n8n/array-functions/filter-n8n/)
- [concat – ฟังก์ชันต่อข้อความหลาย ๆ ตัว](https://www.thepexcel.com/functions/n8n/string-functions/concat-n8n/)

## แหล่งข้อมูลเพิ่มเติม

- [n8n Expressions Documentation](https://docs.n8n.io/code/expressions/) _(article)_
- [n8n Data Transformation Guide](https://docs.n8n.io/data/transforming-data/) _(article)_
- [n8n Set Node Documentation](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/) _(article)_

---

_Source: [https://www.thepexcel.com/functions/n8n/array-functions/flatten-n8n/](https://www.thepexcel.com/functions/n8n/array-functions/flatten-n8n/)_
