ตรวจสอบว่าทุกรายการใน array ตรงตามเงื่อนไขหรือไม่ คืนค่า true ถ้าทั้งหมดผ่าน false ถ้ามีสักอันไม่ผ่าน
=$json.array.every(item => condition)
=$json.array.every(item => condition)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| callback | Function | Yes | ฟังก์ชันที่ทดสอบแต่ละค่า รับพารามิเตอร์ (element, index, array) และต้องคืนค่า true หรือ false | |
| thisArg | any | Optional | ค่า this ที่จะใช้ในเมื่อเรียกใช้ callback (ใช้น้อยมากใน n8n) |
General usage
{{ [2, 4, 6].every(n => n % 2 === 0) }}={{ [2, 4, 6].every(n => n % 2 === 0) }}
true
{{ $json.users.every(u => u.isActive === true) }}={{ $json.users.every(u => u.isActive === true) }}
true/false
{{ $json.products.every(p => p.price > 0) }}={{ $json.products.every(p => p.price > 0) }}
false
{{ $json.passwords.every(pwd => pwd.length >= 8) }}={{ $json.passwords.every(pwd => pwd.length >= 8) }}
true/false
{{ $json.orders.every(order => order.customerId && order.total > 0) }}={{ $json.orders.every(order => order.customerId && order.total > 0) }}
true/false
ใช่ทุกประการ empty array จะคืน true เสมอ นี่เรียกว่า ‘vacuous truth’ ในตรรมศาสตร์ เพราะว่าไม่มีรายการใดที่ไม่ผ่านเงื่อนไข
every() ต้องตรงทั้งหมด some() ต้องตรงบางค่า – every ใช้ AND, some ใช้ OR
ดีมากเพราะ every() หยุดวนตั้งแต่เจอค่าแรกที่ไม่ตรง (short-circuit) ไม่จำเป็นต้องเช็ครายการที่เหลือ
ใช่ได้ – ใช้ใน Set node ด้วยเครื่องหมาย {{ }} ก็ได้ แต่ Code node ไม่ต้องใช้เครื่องหมายนี้
every() เป็น JavaScript array method มาตรฐาน ที่ใช้ได้ใน n8n expressions และ Code node มันจะตรวจสอบว่าทุกรายการในอาร์เรย์ตรงตามเงื่อนไขที่เรากำหนด คืนค่า true ถ้าทั้งหมดผ่านการทดสอบ หรือ false ถ้ามีสักรายการไม่ผ่าน
สิ่งที่เจ๋งคือ every() จะหยุดตรวจสอบทันทีที่เจอค่าที่ไม่ตรงเงื่อนไข (short-circuit evaluation) ทำให้มันประหยัด performance แม้ array จะมีรายการเยอะ นั่นคือเหตุผลที่ผมชอบใช้มันในการ validate ข้อมูลก่อนส่งไป downstream nodes
ส่วนตัวผม ผมใช้ every() บ่อยมากในการ validate workflow ก่อนประมวลผลต่อ เช่น ตรวจสอบว่าทุกรายการขาย (orders) มีลูกค้า หรือทุกอีเมลในรายชื่อถูกรูปแบบ หรือทุกราคาเป็นจำนวนบวก ด้วยการคำนวณแบบนี้ workflow ของผมจึงเชื่อถือได้มากขึ้น