รหัสนี้กำหนดฟังก์ชันที่เรียกว่า firstNonRepeatingElement() ที่รับพารามิเตอร์ตัวเดียว สตริง และส่งกลับอักขระตัวแรกที่ไม่ซ้ำในสตริงนั้น

ฟังก์ชันจะเริ่มต้นวัตถุว่างชื่อ obj ก่อน จากนั้นใช้ for-of loop เพื่อวนซ้ำอักขระแต่ละตัวในสตริงอินพุต สำหรับอักขระแต่ละตัว โค้ดจะตรวจสอบว่าอักขระนั้นมีอยู่แล้วเป็นคีย์ในอ็อบเจ็กต์ obj หรือไม่ หากเป็นเช่นนั้น ค่าของคีย์นั้น (ซึ่งแสดงถึงจำนวนครั้งที่อักขระปรากฏในสตริง) จะเพิ่มขึ้น 1 หากไม่มีคีย์นั้นอยู่ คีย์จะถูกสร้างขึ้นและตั้งค่าเป็น 1

หลังจากที่ for-of loop เสร็จสมบูรณ์ ฟังก์ชันจะใช้ for-in loop เพื่อวนซ้ำแต่ละคีย์ในอ็อบเจ็กต์ obj สำหรับแต่ละคีย์ (ซึ่งแสดงถึงอักขระเฉพาะในสตริงอินพุต) โค้ดจะตรวจสอบว่าค่าของคีย์นั้นเท่ากับ 1 หรือไม่ หากเป็นเช่นนั้น ฟังก์ชันจะส่งคืนคีย์นั้นทันที (ซึ่งเป็นอักขระตัวแรกที่ไม่ซ้ำใน สตริง)

หากการวนซ้ำ for-in เสร็จสมบูรณ์โดยไม่ได้ค้นหาคีย์ที่มีค่า 1 ฟังก์ชันจะส่งกลับ -1 เพื่อระบุว่าไม่พบอักขระที่ไม่ซ้ำ

ท้ายที่สุดแล้ว ฟังก์ชันนี้จะถูกเรียกพร้อมกับสตริงตัวอย่างเพื่อทดสอบ และส่งคืนองค์ประกอบแรกที่ไม่ซ้ำกัน

function firstNonRepeatingElement(str) {
  const obj = {}
  for (let elem of str) {
    if (obj[elem]) {
      obj[elem] = obj[elem] + 1
    } else {
      obj[elem] = 1
    }
    // obj[elem] = obj[elem] ? obj[elem] + 1 : 1
  }
  // console.log('occurence', obj)

  for (let elem in obj) {
    if (obj[elem] == 1) {
      return elem
    }
  }

  return -1
}

var str = '1122343599787'
console.log(firstNonRepeatingElement(str))

วิธีการใช้อ็อบเจ็กต์เพื่อติดตามจำนวนครั้งที่อักขระแต่ละตัวปรากฏในสตริง จากนั้นวนซ้ำอ็อบเจ็กต์เพื่อค้นหาอักขระตัวแรกที่ไม่ซ้ำเป็นวิธีที่มีประสิทธิภาพในการแก้ปัญหานี้ มีความซับซ้อนด้านเวลาเป็น O(n) เนื่องจากวนซ้ำผ่านสตริงอินพุตหนึ่งครั้ง และผ่านอ็อบเจ็กต์หนึ่งครั้ง โดยที่ n คือจำนวนอักขระในสตริงอินพุต

นี่คือตัวอย่างวิธีการใช้ฟังก์ชัน firstNonRepeatingElement():

let str = "abcabcdefgh"
let firstNonRepeatingChar = firstNonRepeatingElement(str)
console.log(firstNonRepeatingChar) // Output: d

ในตัวอย่างนี้ สตริงอินพุตคือ “abcabcdefgh” ฟังก์ชัน firstNonRepeatingElement ถูกเรียกโดยใช้สตริงนี้เป็นอาร์กิวเมนต์ ฟังก์ชันนี้ใช้ for-of loop เพื่อวนซ้ำอักขระแต่ละตัวในสตริงอินพุตและนับจำนวนที่เกิดขึ้นในวัตถุ obj จากนั้นจะใช้ for-in loop เพื่อวนซ้ำแต่ละคีย์ในวัตถุ obj สำหรับแต่ละคีย์ (ซึ่งแสดงถึงอักขระเฉพาะในสตริงอินพุต) โค้ดจะตรวจสอบว่าค่าของคีย์นั้นเท่ากับ 1 หรือไม่ โดยจะส่งคืนคีย์แรกที่มีค่า 1 ซึ่งในกรณีนี้คือ 'd'

ดังนั้นผลลัพธ์ของตัวอย่างนี้จะเป็น 'd'

ขอบคุณที่อ่าน ขอให้มีความสุขในการเรียนรู้ 😄

สนับสนุนสิ่งพิมพ์ของเราโดยทำตามมัน



โปรดดูบทความต่อไปนี้ด้วย