สมมุติว่าเรามีอาร์เรย์ของตัวเลขแบบนี้ -
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]