Skip to content

for #17

@rootEnginear

Description

@rootEnginear

for มีแบบไหนบ้าง?

  • for ทั่วไป: for (let i = 0; i < 10; i++)
  • for ... in: for (let key in object)
  • for ... of: for (let item of array)
  • (Array) forEach: array.forEach((item) => { /* ... */ })

for ... in หรือ for ... of?

  • for ... in ใช้กับของที่มี key เช่น Object
  • for ... of ใช้กับ iterable object เช่น Array, String

วิธีการจำ: จำว่า ถ้าเราต้อง if (key in object) แปลว่าเราต้อง for (let key in object)

for ไหน break ได้บ้าง?

for ทุกตัวที่ไม่ใช่ forEach สามารถ break ได้หมด — ถ้าพูดง่ายๆ เลยคือ forEach ต้องรับ callback function ซึ่งเราจะสั่งหยุดกลางทางไม่ได้

ทำยังไงให้ Array forEach สามารถ break ได้?

ทำได้ 2 แบบ

1. ใช้ .some

Keyword: true 1 อัน

.some เป็นฟังก์ชันที่เอาไว้เช็คว่ามีตัวหนึ่งตรงตามเงื่อนไขไหม โดยมันจะค่อยๆ วิ่ง linear ไปเรื่อยๆ

เราสามารถทำให้มัน loop ไปเรื่อยๆ แล้วหยุดตัวที่ตามเงื่อนไขได้โดยการ return true ออกไป มันจะหยุด loop ทันที

const maybeHasNull = [1, 2, 3, null, 5, 6]

// เขียนด้วย for ปกติ
// จะหยุดถ้าเจอค่า null
for (let c of maybeHasNull) {
  if (c === null) break
  console.log(c)
}
// => 1 2 3

// เขียนด้วย `.some`
maybeHasNull.some((c) => {
  if (c === null) return true
  console.log(c)
  return false
})
// => 1 2 3

2. ใช้ .every

Keyword: ไม่มี false

.every เป็นฟังก์ชันที่เอาไว้เช็คว่าทุกตัวตรงตามเงื่อนไขไหม โดยจะค่อยๆ วิ่ง linear ไปเรื่อยๆ เหมือนกับ .some

ถ้าพูดง่ายๆ ก็คือตรงกันข้ามกับ .some แหละ โดยจะหยุดถ้ามีค่า false โดน return ออกมา

const maybeHasNull = [1, 2, 3, null, 5, 6]

// เขียนด้วย `.some`
maybeHasNull.some((c) => {
  if (c === null) return true
  console.log(c)
  return false
})
// => 1 2 3

// เขียนด้วย `.every`
maybeHasNull.every((c) => {
  if (c === null) return false
  console.log(c)
  return true
})
// => 1 2 3

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions