---
title: .compact() – ฟังก์ชันลบค่า Falsy ออกจากอาร์เรย์
url: https://www.thepexcel.com/functions/n8n/array-functions/compact-n8n/
type: function-explainer
program: n8n
syntax: "{{ $json.array.compact() }}"
date: 2025-12-16
updated: 2025-12-25
scores:
  popularity: 6
  difficulty: 3
  usefulness: 6
---

# .compact() – ฟังก์ชันลบค่า Falsy ออกจากอาร์เรย์

> .compact() คือฟังก์ชันสำหรับทำความสะอาดข้อมูล โดยลบค่า falsy ทั้งหมด (null, undefined, false, 0, emp

## คำอธิบาย

.compact() คือฟังก์ชันสำหรับทำความสะอาดข้อมูล โดยลบค่า falsy ทั้งหมด (null, undefined, false, 0, empty string) ออกจากอาร์เรย์ เหมาะมากสำหรับการเตรียมข้อมูลก่อนประมวลผลต่อ

## Syntax

```excel
{{ $json.array.compact() }}
```

**Variant**

```excel
$json.items.compact()
```

ใช้เป็น method เพื่อทำความสะอาด $json.items

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| array | Yes | array |  | Array ที่มีค่า falsy ที่ต้องการลบออก (null, undefined, false, 0, '') |

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

### ทำความสะอาดข้อมูลจาก Database

ลบค่า null และ undefined ที่ได้จากการค้นหาข้อมูล ก่อนส่งไปประมวลผลต่อ

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

### กรองข้อมูลที่ว่างเปล่า

ลบ empty string และค่า 0 ที่ไม่ต้องการออกจากรายการ

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

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: ลบค่า Falsy พื้นฐาน

```excel
{{ [1, 0, 'hello', '', null, undefined, false, 'world'].compact() }}
```

**ผลลัพธ์:** `[1, 'hello', 'world']`

ใช้ compact() ในการลบค่าไม่ดี ๆ ออกไป: 0, '', null, undefined, false เหลือเพียงข้อมูลที่มีค่าจริง 1, 'hello', 'world' ครับ นี่คือการใช้ Set Node ที่ง่ายที่สุดเลย เหมาะสำหรับการทดสอบพื้นฐาน

### 2. ตัวอย่างที่ 2: ทำความสะอาดข้อมูลจาก API

```excel
{{ $json.results.compact() }}
```

**ผลลัพธ์:** `[ข้อมูลที่ถูกต้องเท่านั้น]`

ตอนดึงข้อมูลจาก API มักจะได้ค่า null หรือ undefined มาด้วยเสมอ ใช้ compact() ใน Set Node เพื่อลบค่าเหล่านั้นออก เหลือแต่ข้อมูลที่เขม็ญจริง ๆ ไปประมวลผลต่อนะครับ นี่คือการใช้ที่เกิดขึ้นจริงในไฟล์โฟลว์ประจำวัน

### 3. ตัวอย่างที่ 3: กรองข้อมูล Email หลังจาก Map

```excel
{{ $node['Get Data'].json.data.map(x => x.email).compact() }}
```

**ผลลัพธ์:** `[email1@example.com, email2@example.com, ...]`

ดึง email จากทุกรายการ แล้ว compact() เข้ามาลบ email ที่ว่างๆ ออก เหลือแต่ email ที่มีข้อมูลจริง ๆ ลำดับการทำงาน: map() เพื่อดึง field จากอาร์เรย์ → compact() เพื่อลบค่าว่าง ที่เจ๋งคือสะดวกมากในการทำความสะอาดข้อมูลจากโหนดอื่น

### 4. ตัวอย่างที่ 4: ทำความสะอาดข้อมูลก่อนบันทึกฐานข้อมูล

```excel
{{ $json.userInput.split(',').map(x => x.trim()).compact() }}
```

**ผลลัพธ์:** `[ค่า1, ค่า2, ค่า3]`

รับข้อมูลจากผู้ใช้เป็นรูป comma-separated → split(',') เพื่อแตกเป็นอาร์เรย์ → map(x => x.trim()) เพื่อตัดช่องว่าง → compact() เพื่อลบค่าว่างที่เหลือ ผลลัพธ์คือข้อมูลสะอาดที่พร้อมบันทึกลงฐานข้อมูลได้เลย ใช้ workflow แบบนี้บ่อยเวลาจัดการ input หลาย ๆ ค่า

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

- ผมแนะนำให้ใช้ compact() ใน Set Node เพื่อความสะอาดและง่ายต่อการอ่าน แทนการเขียน filter logic เอง ประหยัดเวลามากครับ โดยเฉพาะเวลาทำงานเร่งด่วน

- ที่ต้องระวังคือ compact() ลบค่า 0 ด้วย ถ้าต้องการเก็บ 0 ไว้ ให้ใช้ filter() แล้วระบุเงื่อนไขเอง เช่น filter(x => x !== null && x !== undefined) ใน Filter Node นะครับ

- ส่วนตัวผมใช้ compact() เสมอหลังจาก map() เพื่อลบค่าว่างออกจากผลลัพธ์ สะดวกมากสำหรับการทำความสะอาดข้อมูลขั้นสุดท้ายก่อนส่งต่อ

- ถ้า input array เป็น null หรือ undefined เอง compact() ก็จะให้ error ดังนั้นให้ใช้ optional chaining: {{ $json.array?.compact() }} เพื่อหลีกเลี่ยงปัญหา

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

**Q: ค่า falsy ที่ compact() ลบออกคืออะไรบ้าง?**

ปัญหานี้เจอบ่อยมากครับ compact() ลบค่า null, undefined, false, 0, '' (empty string) ส่วนค่า true, ข้อความที่มีตัวอักษร, ตัวเลขที่ไม่ใช่ 0 ทั้งหมดจะเก็บไว้นะครับ ความเข้าใจเรื่องนี้สำคัญมากต่อการใช้งาน compact() อย่างถูกต้อง

**Q: compact() จะลบค่า 0 ออกจริงๆ หรือ?**

ใช่ครับ ตรงนี้ต้องระวังเพราะ compact() ถือ 0 เป็น falsy value และจะลบออกไป ถ้าคุณต้องการเก็บ 0 ไว้ ให้ใช้ filter() แทน แล้วระบุเงื่อนไขเองจะดีกว่าครับ เช่น filter(x => x !== null && x !== undefined) ใน Filter Node

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

ส่วนตัวผมใช้งาน compact() หลังจากดึงข้อมูล ค้นหา หรือรับ input จากผู้ใช้ เพื่อทำความสะอาดข้อมูลก่อนส่งต่อไปยังโหนดถัดไป ที่เจ๋งคือมันช่วยลดข้อผิดพลาดได้ครับ โดยเฉพาะเวลาส่งข้อมูลไปยังฐานข้อมูลหรือ API ภายนอก

**Q: compact() กับ filter() ต่างกันยังไง ควรใช้อันไหน?**

compact() ลบค่า falsy ทั้งหมดอัตโนมัติ เหมาะใช้ใน Set Node ง่ายๆ ส่วน filter() ให้คุณระบุเงื่อนไขเอง เหมาะใช้เวลาต้องการควบคุมเงื่อนไขเอง ผมใช้ compact() เวลาต้องลบค่าว่างธรรมชาติ แต่ใช้ filter() เวลาต้องการเงื่อนไขพิเศษ

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

- [filter – กรองรายการจากอาร์เรย์ตามเงื่อนไข](https://www.thepexcel.com/functions/n8n/array-functions/filter-n8n/)
- [map – แปลงแต่ละรายการในอาร์เรย์ (transform elements)](https://www.thepexcel.com/functions/n8n/array-functions/map-n8n/)
- [.flatten() – ลดมิติของอาร์เรย์แบบซ้อน](https://www.thepexcel.com/functions/n8n/array-functions/flatten-n8n/)

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

- [n8n Expressions: Builtin Functions](https://docs.n8n.io/code/builtin/data-transformation-functions/) _(article)_
- [n8n Data Transformation Guide](https://docs.n8n.io/code/expressions/overview/) _(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/compact-n8n/](https://www.thepexcel.com/functions/n8n/array-functions/compact-n8n/)_
