Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

การลบการเกิดคี่ของตัวเลข/องค์ประกอบใดๆ ออกจากอาร์เรย์ใน JavaScript


สมมุติว่าเรามีอาร์เรย์ของตัวเลขแบบนี้ -

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]