เราได้รับอาร์เรย์ของจำนวนเต็ม ซึ่งทุกตัวเลขปรากฏจำนวนครั้งคู่ ยกเว้นตัวเดียว เราต้องหาตัวเลขนั้นในการวนลูปเพียงครั้งเดียว
อาร์เรย์ตัวอย่าง
[1, 4, 3, 4, 2, 3, 2, 7, 8, 8, 9, 7, 9]
ก่อนแก้ปัญหานี้ เราต้องเข้าใจเกี่ยวกับตัวดำเนินการ XOR แบบบิตวายซ์ (^)
ตัวดำเนินการ XOR จะคืนค่า TRUE ถ้าตัวถูกดำเนินการทั้งสองตรงข้ามกัน และคืนค่า FALSE ถ้าทั้งสองเหมือนกัน
ตารางความจริงของ XOR
0 ^ 0 → 0 0 ^ 1 → 1 1 ^ 0 → 1 1 ^ 1 → 0
ถ้าสังเกตดีๆ จะพบว่าเมื่อใช้ XOR กับค่าเดียวกัน (เช่น 12^12) จะคืนค่า FALSE หรือ 0 กล่าวคือ สามารถนำไปใช้เพื่อกำจัดค่าที่ปรากฏจำนวนครั้งคู่ได้ ซึ่งเป็นสิ่งที่เราต้องการ
เขียนโค้ดดังนี้
ตัวอย่าง
const sampleArray = [1, 4, 3, 4, 2, 3, 2, 7, 8, 8, 9, 7, 9]; console.log(sampleArray.reduce((a, b) => a ^ b));
โค้ดจะวนลูปผ่านแต่ละสมาชิก และกำจัดตัวเลขที่ปรากฏจำนวนครั้งคู่ ทิ้งไว้เฉพาะตัวเลขที่ปรากฏจำนวนครั้งคี่
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็น
1