สมมุติว่าเรามีอาร์เรย์ของตัวเลขแบบนี้ -
const arr = [1, 6, 3, 1, 3, 1, 6, 3];
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์เช่นอาร์กิวเมนต์แรกและอาร์กิวเมนต์เดียว จากนั้นฟังก์ชันควรค้นหาตัวเลขดังกล่าวทั้งหมดในอาร์เรย์ที่ปรากฏเป็นจำนวนคี่ (ยกเว้นเพียงครั้งเดียว)
ตัวอย่างเช่น
ในอาร์เรย์ด้านบน ตัวเลข 1 และ 3 ทั้งคู่ปรากฏขึ้น 3 ครั้ง (คี่) ดังนั้นฟังก์ชันของเราจึงควรลบการเกิดขึ้นครั้งที่สามของตัวเลขทั้งสองนี้
และอาร์เรย์เอาต์พุตควรมีลักษณะดังนี้ -
const output = [1, 6, 3, 1, 3, 6];
เราจะเตรียม hashmap เพื่อติดตามการเกิดขึ้นของแต่ละหมายเลข และในที่สุด เราจะวนซ้ำบนแผนที่เพื่อลบการเกิดขึ้นล่าสุดของหมายเลขนั้นที่ปรากฏเป็นจำนวนคี่
แต่ละคีย์ในแผนที่ของเราจะเก็บค่าอาร์เรย์ไว้ โดยองค์ประกอบแรกจะเป็นจำนวนครั้งที่องค์ประกอบปรากฏ และวินาทีจะเป็นดัชนีสุดท้ายที่ปรากฏขึ้น
ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const arr = [1, 6, 3, 1, 3, 1, 6, 3]; const removeOddOccurence = (arr =[]) => { // keeping the original array unaltered const copy = arr.slice(); const map = {}; arr.forEach((num, ind) => { if(map.hasOwnProperty(num)){ map[num][0]++; map[num][1] = ind; }else{ map[num] = [1, ind]; }; }); for(const key in map){ const [freq, index] = map[key]; if(freq !== 1 && freq % 2 === 1){ copy.splice(index, 1, ''); }; }; return copy.filter(el => el !== ''); }; console.log(removeOddOccurence(arr));
ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
[1, 6, 3, 1, 3, 6]