some() เป็น JavaScript array method ที่ใช้ตรวจสอบว่ามีรายการอย่างน้อยหนึ่งรายการในอาร์เรย์ผ่านเงื่อนไขที่กำหนดหรือไม่ โดยคืนค่า true ทันทีเมื่อเจอรายการแรกที่ผ่านเงื่อนไข และคืนค่า false ถ้าไม่มีรายการใดผ่านเลย ใช้บ่อยใน n8n workflow
=array.some(callback)
=array.some(callback)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| callback | Function (Arrow function) | Yes | ฟังก์ชันที่ทดสอบแต่ละรายการ รับ parameters: (element, index, array) และคืนค่า truthy/falsy เพื่อบ่งบอกว่ารายการนั้นผ่านเงื่อนไขหรือไม่ | |
| element | Any | Optional | รายการปัจจุบันที่กำลังประมวลผล (parameter แรกของ callback) | |
| index | Number | Optional | ตำแหน่ง index ของรายการปัจจุบัน (parameter ที่สองของ callback, ใช้ไม่บังคับ) | |
| array | Array | Optional | Array ต้นฉบับที่เรียกใช้ some() (parameter ที่สามของ callback, ใช้ไม่บังคับ) |
General usage
{{ $json.numbers.some(x => x > 10) }}แต่ถ้า $json.numbers = [2, 5, 15, 1, 4]
ผลลัพธ์: true (มี 15 ที่มากกว่า 10)
ใช้ใน IF node เพื่อแยก workflow ตามสภาพข้อมูล
={{ $json.numbers.some(x => x > 10) }}
true (ถ้ามีตัวเลขใดมากกว่า 10) หรือ false (ถ้าไม่มี)
{{ $json.users.some(user => user.role === 'admin') }}ใช้ใน IF node: ถ้ามี admin ให้ส่ง notification ไป Slack แต่ถ้าไม่มีให้ข้าม
={{ $json.users.some(user => user.role === 'admin') }}
true (ถ้ามีผู้ใช้ที่เป็น admin อย่างน้อยหนึ่งคน)
{{ $json.items.some(item => item.price > 1000) }}ใช้ Set node สร้างฟิลด์:
has_expensive_items: {{ $json.items.some(item => item.price > 1000) }}
จากนั้นใช้ IF node เช็ค has_expensive_items เพื่อใช้ส่วนลดพิเศษ
={{ $json.items.some(item => item.price > 1000) }}
true/false
{{ $json.contacts.some(contact => !contact.email.isEmail()) }}ใช้ใน IF node: ถ้ามี invalid email ให้ส่งไป error handling workflow
={{ $json.contacts.some(contact => !contact.email.isEmail()) }}
true (ถ้ามี contact ที่ email ไม่ถูกต้อง)
{{ $json.orders.some(order => order.status === 'pending') }}ใช้ใน Code node:
if ($input.all().some(item => item.json.orders.some(order => order.status === 'pending'))) {
// ส่ง notification
}
เทคนิค: nested some() เพื่อเช็ค multiple levels
={{ $json.orders.some(order => order.status === 'pending') }}
true/false
{{ $json.logs.some(log => log.startsWith('error')) }}ใช้ใน IF node เพื่อแยก error logs ออกจาก normal logs
={{ $json.logs.some(log => log.startsWith('error')) }}
true/false
{{ $json.numbers.some(num => num % 2 === 0) }}ใช้ใน Set node:
has_even_number: {{ $json.numbers.some(num => num % 2 === 0) }}
={{ $json.numbers.some(num => num % 2 === 0) }}
true (ถ้ามีตัวเลขคู่อย่างน้อยหนึ่งตัว)
{{ $json.data.some(item => item.value == null) }}หมายเหตุ: ใช้ == null (double equals) จะเช็คทั้ง null และ undefined พร้อมกัน
ใช้ใน IF node: ถ้ามี null value ให้ clean ข้อมูลก่อนส่งต่อ
={{ $json.data.some(item => item.value == null) }}
true/false
some() คืนค่า true ถ้ามีรายการใด ๆ ผ่านเงื่อนไข (อย่างน้อยหนึ่งรายการ) ในขณะที่ every() คืนค่า true ต้องทุกรายการผ่านเงื่อนไข
ตัวอย่าง:
[2, 5, 8].some(x => x > 5) // true (มี 8 ที่มากกว่า 5)
[2, 5, 8].every(x => x > 5) // false (ไม่ใช่ทุกตัวมากกว่า 5)
ใช้ some() เมื่อต้องการ “มีบ้างหรือไม่”
ใช้ every() เมื่อต้องการ “ทุกอันต้องผ่าน”
some() มีประสิทธิภาพดีกว่าเพราะหยุดทันทีที่เจอรายการแรกที่ผ่าน (short-circuit) ในขณะที่ filter() จะวนลูปทั้ง array เสมอ
ตัวอย่าง array ขนาด 1,000 รายการ:
– some(x => x > 10): หยุดที่รายการที่ 5 (เจอแล้ว) → เร็วมาก
– filter(x => x > 10).length > 0: วนลูปครบ 1,000 รายการ → ช้ากว่า
ใช้ some() สำหรับเช็คว่า “มีหรือไม่”
ใช้ filter() เมื่อต้องการ array ที่กรองแล้ว
some() ใช้ได้ในทุก node ที่รองรับ expressions:
1. IF node: {{ $json.items.some(x => x.status === ‘error’) }}
ลำทาง workflow ตามสภาพข้อมูล
2. Set node:
has_errors: {{ $json.logs.some(log => log.level === ‘error’) }}
สร้างฟิลด์ boolean
3. Code node:
if ($input.all().some(item => item.json.price > 1000)) { … }
Logic ที่ซับซ้อน
4. Switch node: ใช้ some() ใน routing rules
แต่ละ node เหมาะกับงานต่างกัน ขึ้นอยู่กับความซับซ้อนของ logic
some() จะคืนค่า false เสมอถ้า array ว่าง เพราะไม่มีรายการใดให้ทดสอบ
ตัวอย่าง:
{{ [].some(x => x > 10) }}
ผลลัพธ์: false
นี่คือ behavior มาตรฐานของ JavaScript และสอดคล้องกับตรรกศาสตร์ว่า “ในชุดว่าง ไม่มีรายการใดผ่านเงื่อนไข”
ควรเช็คว่า array มีข้อมูลก่อนใช้ some():
{{ $json.items?.length > 0 && $json.items.some(x => x.valid) }}
some() ใน JavaScript มาตรฐานไม่รองรับ async callback โดยตรง ถ้าใช้ async function จะได้ Promise ซึ่ง some() จะถือว่า truthy เสมอ
ถ้าต้องการ async operation ให้ใช้ใน Code node แทน:
const results = await Promise.all(
$input.all().map(item => checkAPI(item.json))
);
return results.some(result => result.valid);
หรือใช้ HTTP Request node กับ Split In Batches เพื่อทำ async ทีละ batch
ได้ครับ ใช้ nested some() เพื่อเช็ค array หลายชั้น
ตัวอย่าง:
{{ $json.departments.some(dept =>
dept.employees.some(emp => emp.salary > 100000)
) }}
อธิบาย: เช็คว่ามี department ใดที่มี employee ที่เงินเดือนเกิน 100,000
แต่ถ้า logic ซับซ้อนมาก แนะนำใช้ Code node เพื่อความอ่านง่าย:
const hasHighSalary = $input.all().some(item =>
item.json.departments.some(dept =>
dept.employees.some(emp => emp.salary > 100000)
)
);
return { hasHighSalary };
some() เป็นเมธอดของอาร์เรย์ใน JavaScript ที่ใช้ทดสอบว่ามีรายการใด ๆ ในอาร์เรย์ที่ตรงกับเงื่อนไขหรือไม่ ทำงานโดยส่งแต่ละรายการเข้าฟังก์ชันตรวจสอบ และคืนค่าเป็น true หรือ false ทันที
การทำงานของ some() จะคืนค่า true ทันทีที่เจอรายการแรกที่ผ่านเงื่อนไข ไม่ต้องวนลูปต่อ ซึ่งประหยดเวลามากถ้าอาร์เรย์มีข้อมูลเยอะ ตัวอย่างเช่น ถ้าคุณมีข้อมูลหนึ่งพันรายการ และรายการที่สามผ่านเงื่อนไข ระบบจะหยุดทันทีและไม่ตรวจสอบอีก 997 รายการที่เหลือ
ที่เจ๋งคือ some() ใช้ตรวจสอบแบบ “มีอย่างน้อยหนึ่งรายการหรือไม่” ซึ่งต่างจาก every() ที่ต้อง “ทุกรายการผ่าน” ทำให้เหมาะกับการใช้ใน IF node เพื่อแยก workflow ตามสภาพข้อมูล เช่น ถ้ามีรายการที่มีปัญหาให้ส่งไปทางหนึ่ง ถ้าไม่มีให้ส่งไปอีกทาง
ใน n8n workflow คุณจะใช้ some() บ่อยมากในกรณีต่อไปนี้:
– ใช้ใน IF node เพื่อเช็คว่ามีรายการที่ตรงเงื่อนไขหรือไม่ แล้วแยก route ไปคนละทาง
– ใช้ใน Set node เพื่อสร้างฟิลด์แบบ boolean บอกสถานะว่ามีรายการที่ผ่านเงื่อนไขหรือไม่
– ใช้ใน Code node เพื่อทำการตรวจสอบความถูกต้องของข้อมูลที่ซับซ้อน
สิ่งสำคัญที่ต้องรู้:
– some() ไม่เปลี่ยนแปลงอาร์เรย์ต้นฉบับ คุณสามารถใช้ได้อย่างปลอดภัย
– ถ้าอาร์เรย์ว่าง จะคืนค่า false เสมอ เพราะไม่มีรายการให้ตรวจสอบ
– หยุดวนลูปทันทีที่เจอรายการที่ผ่าน ประหยดเวลากว่าการใช้ filter แล้วเช็คว่ามีกี่รายการ
– ข้ามช่องว่างในอาร์เรย์อัตโนมัติ ไม่ตรวจสอบช่องที่ไม่มีค่า
ส่วนตัวผมใช้ some() บ่อยมากใน n8n เพราะมันช่วยทำ conditional logic แบบ clean และอ่านง่าย โดยเฉพาะตอนต้องเช็คว่า “มีรายการที่มีปัญหาหรือไม่” ก่อนส่งต่อไปขั้นตอนถัดไป มันทำให้ workflow ของเราชัดเจนและบำรุงรักษาง่าย