merge() เป็นเมธอดของ n8n ที่รวมอ็อบเจ็กต์สองตัวโดยใช้ base object (อ็อบเจ็กต์แรก) เป็นฐาน เมื่อคีย์ซ้ำกัน ค่าจาก base จะถูกเก็บไว้ สร้าง object ใหม่ (immutable) ไม่แก้ไข object เดิม ใช้ได้กับการสร้างค่าเริ่มต้น รวมข้อมูล หรือเพิ่ม metadata ให้ workflow results
=baseObject.merge(objectToMerge)
=baseObject.merge(objectToMerge)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| objectToMerge | object | Yes | อ็อบเจ็กต์ที่ต้องการรวมเข้ากับ base object โปรแกรมจะเพิ่มฟิลด์ใหม่จาก objectToMerge เข้าไปใน base object แต่ถ้ามีคีย์ที่ซ้ำกันจะใช้ค่าจาก base object เท่านั้น (base wins principle) |
รวมข้อมูลจากฐานข้อมูลต่างๆ เป็นโปรไฟล์ผู้ใช้เดียว
รวมการตั้งค่าจากหลายแหล่งเป็นแหล่งเดียว
{{ $json.userData.merge({fetchedAt: $now, source: 'api', version: '1.0'}) }}={{ $json.userData.merge({fetchedAt: $now, source: 'api', version: '1.0'}) }}
{id: 123, name: 'John', email: 'john@ex.com', fetchedAt: '2024-12-23T10:30:00Z', source: 'api', version: '1.0'}
{{ {timeout: 30, retries: 3, debug: false}.merge($json.settings) }}={{ {timeout: 30, retries: 3, debug: false}.merge($json.settings) }}
{timeout: 30, retries: 3, debug: false, customField: 'value'}
{{ $json.dbRecord.merge({updatedAt: $now, updatedBy: $json.currentUser.email}) }}={{ $json.dbRecord.merge({updatedAt: $now, updatedBy: $json.currentUser.email}) }}
{id: 1, name: 'Product', price: 100, updatedAt: '2024-12-23T10:30:00Z', updatedBy: 'admin@example.com'}
{{ {role: 'user', verified: true}.merge({role: 'admin', newField: 'value'}) }}={{ {role: 'user', verified: true}.merge({role: 'admin', newField: 'value'}) }}
{role: 'user', verified: true, newField: 'value'}
ทั้งคู่ทำการ shallow merge บน object แต่ merge() เป็นเมธอดของ n8n ส่วน Object.assign() เป็นเมธอดของ JavaScript standard ใน n8n expressions ทั้งคู่ใช้ได้และให้ผลลัพธ์เดียวกัน แต่ merge() อ่านง่ายกว่าและเป็นที่รู้จักของผู้ใช้ n8n
merge() สร้าง object ใหม่ (immutable) ไม่เปลี่ยนแปลง base object เดิมเลย ข้อมูลเดิมยังคงอยู่ในสภาพเดิม หลังจากการ merge เสร็จสิ้น
ไม่ได้ เป็นการ shallow merge เท่านั้น ถ้า nested object ซ้ำกันระบบจะใช้ reference object เดียว ถ้าต้องการ deep merge จะต้องใช้ recursive function หรือ JSON.stringify + JSON.parse สำหรับการ deep copy
ใช้เมื่อต้องการเพิ่มฟิลด์ metadata (timestamp, source, user) ให้กับข้อมูล สร้างค่าเริ่มต้น (defaults) เพื่อป้องกัน undefined รวมข้อมูลจาก API หลายตัว หรือเพิ่มข้อมูล audit fields (createdAt, updatedBy) เพื่อติดตามประวัติการแก้ไข
merge() รองรับ object ขนาดใหญ่ได้ ถ้า object มี nested objects ต้องระวัง shallow merge behavior ลองใช้ keys() function เพื่อ debug ว่า properties ไหนถูก merge เข้าไป
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 👍