รหัสนี้กำหนดฟังก์ชันที่เรียกว่า 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'
ขอบคุณที่อ่าน ขอให้มีความสุขในการเรียนรู้ 😄
สนับสนุนสิ่งพิมพ์ของเราโดยทำตามมัน
โปรดดูบทความต่อไปนี้ด้วย