Thep Excel

merge – รวมสองอ็อบเจ็กต์เข้าด้วยกัน โดยใช้ base wins principle (shallow merge)

merge() เป็นเมธอดของ n8n ที่รวมอ็อบเจ็กต์สองตัวโดยใช้ base object (อ็อบเจ็กต์แรก) เป็นฐาน เมื่อคีย์ซ้ำกัน ค่าจาก base จะถูกเก็บไว้ สร้าง object ใหม่ (immutable) ไม่แก้ไข object เดิม ใช้ได้กับการสร้างค่าเริ่มต้น รวมข้อมูล หรือเพิ่ม metadata ให้ workflow results

=baseObject.merge(objectToMerge)

By ThepExcel AI Agent
16 December 2025

Function Metrics


Popularity
7/10

Difficulty
3/10

Usefulness
7/10

Syntax & Arguments

=baseObject.merge(objectToMerge)

Argument Type Required Default Description
objectToMerge object Yes อ็อบเจ็กต์ที่ต้องการรวมเข้ากับ base object โปรแกรมจะเพิ่มฟิลด์ใหม่จาก objectToMerge เข้าไปใน base object แต่ถ้ามีคีย์ที่ซ้ำกันจะใช้ค่าจาก base object เท่านั้น (base wins principle)

How it works

รวมข้อมูลผู้ใช้

รวมข้อมูลจากฐานข้อมูลต่างๆ เป็นโปรไฟล์ผู้ใช้เดียว

สร้างการตั้งค่า

รวมการตั้งค่าจากหลายแหล่งเป็นแหล่งเดียว

Examples

ตัวอย่างที่ 1: เพิ่มฟิลด์ metadata ให้ API response ในเวิร์กโฟลว์
{{ $json.userData.merge({fetchedAt: $now, source: 'api', version: '1.0'}) }}
รวม user data จาก API response กับ metadata fields (fetchedAt, source, version) เป็นประโยชน์อย่างมากเพื่อติดตามข้อมูลสำหรับ logging และ auditing ของเวิร์กโฟลว์
n8n Formula:

={{ $json.userData.merge({fetchedAt: $now, source: 'api', version: '1.0'}) }}

Result:

{id: 123, name: 'John', email: 'john@ex.com', fetchedAt: '2024-12-23T10:30:00Z', source: 'api', version: '1.0'}

ตัวอย่างที่ 2: สร้างค่าเริ่มต้น (base wins principle)
{{ {timeout: 30, retries: 3, debug: false}.merge($json.settings) }}
สร้างค่าเริ่มต้น (defaults) จากนั้น merge เข้ากับ user settings ถ้า user ส่ง timeout=60 ก็จะใช้ค่า default 30 เพราะ base wins principle (safe fallback strategy)
n8n Formula:

={{ {timeout: 30, retries: 3, debug: false}.merge($json.settings) }}

Result:

{timeout: 30, retries: 3, debug: false, customField: 'value'}

ตัวอย่างที่ 3: รวม database record กับ form input และเพิ่มข้อมูล audit
{{ $json.dbRecord.merge({updatedAt: $now, updatedBy: $json.currentUser.email}) }}
รักษา database fields เดิม (id, name, price) ไว้อย่างปลอดภัย เพิ่มฟิลด์ audit (updatedAt, updatedBy) เพื่อติดตามประวัติการแก้ไขและการอัปเดตของเวิร์กโฟลว์
n8n Formula:

={{ $json.dbRecord.merge({updatedAt: $now, updatedBy: $json.currentUser.email}) }}

Result:

{id: 1, name: 'Product', price: 100, updatedAt: '2024-12-23T10:30:00Z', updatedBy: 'admin@example.com'}

ตัวอย่างที่ 4: Base wins – ค่าเดิมไม่ถูกแทนที่
{{ {role: 'user', verified: true}.merge({role: 'admin', newField: 'value'}) }}
เมื่อคีย์ 'role' ซ้ำ ค่าจาก base (user) จะถูกเก็บไว้ ไม่ใช่ค่า admin จาก object ที่ merge มา useful สำหรับป้องกันการ escalate permissions
n8n Formula:

={{ {role: 'user', verified: true}.merge({role: 'admin', newField: 'value'}) }}

Result:

{role: 'user', verified: true, newField: 'value'}

FAQs

merge() เทียบกับ Object.assign() ต่างกันอย่างไรบ้าง?

ทั้งคู่ทำการ shallow merge บน object แต่ merge() เป็นเมธอดของ n8n ส่วน Object.assign() เป็นเมธอดของ JavaScript standard ใน n8n expressions ทั้งคู่ใช้ได้และให้ผลลัพธ์เดียวกัน แต่ merge() อ่านง่ายกว่าและเป็นที่รู้จักของผู้ใช้ n8n

merge() สร้าง object ใหม่หรือแก้ไขอ็อบเจ็กต์เดิม?

merge() สร้าง object ใหม่ (immutable) ไม่เปลี่ยนแปลง base object เดิมเลย ข้อมูลเดิมยังคงอยู่ในสภาพเดิม หลังจากการ merge เสร็จสิ้น

merge() สามารถทำการ deep merge กับ nested objects ได้หรือไม่?

ไม่ได้ เป็นการ shallow merge เท่านั้น ถ้า nested object ซ้ำกันระบบจะใช้ reference object เดียว ถ้าต้องการ deep merge จะต้องใช้ recursive function หรือ JSON.stringify + JSON.parse สำหรับการ deep copy

ใช้ merge() เมื่อไหร่ในการสร้างเวิร์กโฟลว์ n8n?

ใช้เมื่อต้องการเพิ่มฟิลด์ metadata (timestamp, source, user) ให้กับข้อมูล สร้างค่าเริ่มต้น (defaults) เพื่อป้องกัน undefined รวมข้อมูลจาก API หลายตัว หรือเพิ่มข้อมูล audit fields (createdAt, updatedBy) เพื่อติดตามประวัติการแก้ไข

ถ้า objectToMerge มีจำนวน properties มากมาย ต้องทำอย่างไร?

merge() รองรับ object ขนาดใหญ่ได้ ถ้า object มี nested objects ต้องระวัง shallow merge behavior ลองใช้ keys() function เพื่อ debug ว่า properties ไหนถูก merge เข้าไป

Resources & Related

Additional Notes

merge() เป็นเมธอดของ n8n ที่ใช้รวมอ็อบเจ็กต์สองตัวเข้าด้วยกัน โดยใช้ base object (อ็อบเจ็กต์แรก) เป็นฐานหลัก เมื่อมีคีย์ที่ซ้ำกันระหว่างสองอ็อบเจ็กต์ ค่าจาก base object จะถูกเก็บไว้ (หลักการ base wins) ซึ่งเป็นการ shallow merge ที่หมายความว่าถ้ามี nested objects ที่ซ้ำกัน ระบบจะใช้ reference object เดียว ไม่ได้ทำ deep copy

ในเวิร์กโฟลว์ n8n ใช้ merge() เพื่อเพิ่มฟิลด์ metadata เช่น timestamp หรือ source, สร้างค่าเริ่มต้นเพื่อป้องกันค่า undefined, หรือรวมข้อมูลจาก API response เข้ากับ database record ให้เป็นอ็อบเจ็กต์เดียว

ส่วนตัวผมใช้ merge() บ่อยมากเพื่อหลีกเลี่ยงการ hardcode configuration ทั้งหมด – สร้าง defaults ไว้ก่อน แล้วค่อย merge เข้ากับ user input แบบนี้ความปลอดภัยจึงดีขึ้น เพราะค่า default ยังคงอยู่ถ้า user ไม่ override 👍

Leave a Reply

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