Thep Excel

some – ตรวจสอบว่ามีรายการใดผ่านเงื่อนไขหรือไม่

some() เป็น JavaScript array method ที่ใช้ตรวจสอบว่ามีรายการอย่างน้อยหนึ่งรายการในอาร์เรย์ผ่านเงื่อนไขที่กำหนดหรือไม่ โดยคืนค่า true ทันทีเมื่อเจอรายการแรกที่ผ่านเงื่อนไข และคืนค่า false ถ้าไม่มีรายการใดผ่านเลย ใช้บ่อยใน n8n workflow

=array.some(callback)

By ThepExcel AI Agent
16 December 2025

Function Metrics


Popularity
6/10

Difficulty
4/10

Usefulness
6/10

Syntax & Arguments

=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, ใช้ไม่บังคับ)

How it works

Scenario 1

General usage

Examples

ตัวอย่างพื้นฐาน – เช็คว่ามีตัวเลขมากกว่า 10
{{ $json.numbers.some(x => x > 10) }}
สมมติว่า $json.numbers = [2, 5, 8, 1, 4]
ผลลัพธ์: false (ไม่มีตัวเลขใดมากกว่า 10)

แต่ถ้า $json.numbers = [2, 5, 15, 1, 4]
ผลลัพธ์: true (มี 15 ที่มากกว่า 10)

ใช้ใน IF node เพื่อแยก workflow ตามสภาพข้อมูล

n8n Formula:

={{ $json.numbers.some(x => x > 10) }}

Result:

true (ถ้ามีตัวเลขใดมากกว่า 10) หรือ false (ถ้าไม่มี)

เช็คว่ามี admin ในรายชื่อผู้ใช้
{{ $json.users.some(user => user.role === 'admin') }}
สมมติว่า $json.users = [
{ name: 'John', role: 'user' },
{ name: 'Sarah', role: 'admin' },
{ name: 'Mike', role: 'user' }
]
ผลลัพธ์: true (เพราะ Sarah เป็น admin)

ใช้ใน IF node: ถ้ามี admin ให้ส่ง notification ไป Slack แต่ถ้าไม่มีให้ข้าม

n8n Formula:

={{ $json.users.some(user => user.role === 'admin') }}

Result:

true (ถ้ามีผู้ใช้ที่เป็น admin อย่างน้อยหนึ่งคน)

เช็คว่ามีสินค้าที่ราคาเกิน 1000 บาท
{{ $json.items.some(item => item.price > 1000) }}
สมมติว่า $json.items = [
{ name: 'Keyboard', price: 500 },
{ name: 'Monitor', price: 3500 },
{ name: 'Mouse', price: 250 }
]
ผลลัพธ์: true (เพราะ Monitor ราคา 3500)

ใช้ Set node สร้างฟิลด์:
has_expensive_items: {{ $json.items.some(item => item.price > 1000) }}

จากนั้นใช้ IF node เช็ค has_expensive_items เพื่อใช้ส่วนลดพิเศษ

n8n Formula:

={{ $json.items.some(item => item.price > 1000) }}

Result:

true/false

เช็คว่ามี email ที่ invalid
{{ $json.contacts.some(contact => !contact.email.isEmail()) }}
สมมติว่า $json.contacts = [
{ name: 'Alice', email: 'alice@example.com' },
{ name: 'Bob', email: 'invalid-email' },
{ name: 'Charlie', email: 'charlie@test.com' }
]
ผลลัพธ์: true (เพราะ Bob มี email ที่ไม่ถูกต้อง)

ใช้ใน IF node: ถ้ามี invalid email ให้ส่งไป error handling workflow

n8n Formula:

={{ $json.contacts.some(contact => !contact.email.isEmail()) }}

Result:

true (ถ้ามี contact ที่ email ไม่ถูกต้อง)

เช็คว่ามี order ที่ status เป็น pending
{{ $json.orders.some(order => order.status === 'pending') }}
สมมติว่า $json.orders = [
{ id: 1, status: 'completed' },
{ id: 2, status: 'pending' },
{ id: 3, status: 'shipped' }
]
ผลลัพธ์: true (เพราะ order id 2 เป็น pending)

ใช้ใน Code node:
if ($input.all().some(item => item.json.orders.some(order => order.status === 'pending'))) {
// ส่ง notification
}

เทคนิค: nested some() เพื่อเช็ค multiple levels

n8n Formula:

={{ $json.orders.some(order => order.status === 'pending') }}

Result:

true/false

เช็คว่ามีคำใน array ที่ขึ้นต้นด้วย 'error'
{{ $json.logs.some(log => log.startsWith('error')) }}
สมมติว่า $json.logs = [
'info: Server started',
'warning: High memory usage',
'error: Connection failed'
]
ผลลัพธ์: true (เพราะมี 'error: Connection failed')

ใช้ใน IF node เพื่อแยก error logs ออกจาก normal logs

n8n Formula:

={{ $json.logs.some(log => log.startsWith('error')) }}

Result:

true/false

เช็คว่ามีตัวเลขคู่ใน array
{{ $json.numbers.some(num => num % 2 === 0) }}
สมมติว่า $json.numbers = [1, 3, 5, 8, 9]
ผลลัพธ์: true (เพราะมี 8 ที่เป็นเลขคู่)

ใช้ใน Set node:
has_even_number: {{ $json.numbers.some(num => num % 2 === 0) }}

n8n Formula:

={{ $json.numbers.some(num => num % 2 === 0) }}

Result:

true (ถ้ามีตัวเลขคู่อย่างน้อยหนึ่งตัว)

เช็คว่ามี property ที่เป็น null หรือ undefined
{{ $json.data.some(item => item.value == null) }}
สมมติว่า $json.data = [
{ id: 1, value: 100 },
{ id: 2, value: null },
{ id: 3, value: 200 }
]
ผลลัพธ์: true (เพราะ id 2 มี value เป็น null)

หมายเหตุ: ใช้ == null (double equals) จะเช็คทั้ง null และ undefined พร้อมกัน

ใช้ใน IF node: ถ้ามี null value ให้ clean ข้อมูลก่อนส่งต่อ

n8n Formula:

={{ $json.data.some(item => item.value == null) }}

Result:

true/false

FAQs

some() ต่างจาก every() อย่างไร?

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() ต่างจาก filter().length > 0 อย่างไร?

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() ใช้ได้ใน n8n node ไหนบ้าง?

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

ถ้า array ว่าง some() จะคืนค่าอะไร?

some() จะคืนค่า false เสมอถ้า array ว่าง เพราะไม่มีรายการใดให้ทดสอบ

ตัวอย่าง:
{{ [].some(x => x > 10) }}
ผลลัพธ์: false

นี่คือ behavior มาตรฐานของ JavaScript และสอดคล้องกับตรรกศาสตร์ว่า “ในชุดว่าง ไม่มีรายการใดผ่านเงื่อนไข”

ควรเช็คว่า array มีข้อมูลก่อนใช้ some():
{{ $json.items?.length > 0 && $json.items.some(x => x.valid) }}

some() รองรับ async callback ไหม?

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

ใช้ some() กับ nested array ได้ไหม?

ได้ครับ ใช้ 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 };

Resources & Related

Additional Notes

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 ของเราชัดเจนและบำรุงรักษาง่าย

Leave a Reply

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