Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

เปลี่ยนอาร์เรย์แบบ in-place ด้วย splice() ใน JavaScript

เราต้องเขียนฟังก์ชันที่ รับอาร์เรย์ arr และตัวเลข n คืนค่าอาร์เรย์ที่องค์ประกอบซ้ำไม่เกิน n ครั้ง และต้องทำทั้งหมดนี้โดยไม่รบกวนดัชนีขององค์ประกอบที่ต้องการ

เราจะเก็บจำนวนของทุกองค์ประกอบใน hashmap และระหว่างการวนลูป เมื่อจำนวนขององค์ประกอบใดเกินจำนวนสูงสุด เราจะ splice องค์ประกอบนั้นออก โค้ดจะเป็นดังนี้:

ตัวอย่างโค้ด

const arr = [7, 26, 21, 41, 43, 2, 26, 24, 10, 26, 10, 10, 24, 35, 35, 35, 43, 26, 41, 7, 24, 24, 21, 24, 10, 35, 10, 7, 24, 7, 35, 26, 41, 35, 2, 43, 24, 2, 41, 26, 41, 7, 7, 26, 2, 10, 43, 10, 35, 41, 24, 7, 2, 2, 7, 2, 26, 24, 26, 43, 43, 21, 10, 28, 10];
const array = [12, 4, 2, 12, 32, 21, 67, 4, 32, 5];

const deleteExtra = (arr, n) => {
  const map = {};
  for (let i = 0; i < arr.length; i++) {
    if (map[arr[i]]) {
      if (map[arr[i]] >= n) {
        arr.splice(i, 1);
        i--;
      } else {
        map[arr[i]]++;
      }
      continue;
    }
    map[arr[i]] = 1;
  }
};

deleteExtra(array, 1);
deleteExtra(arr, 2);
console.log(array);
console.log(arr);

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็นดังนี้:

[ 12, 4, 2, 32, 21, 67, 5 ]
[ 7, 26, 21, 41, 43, 2, 26, 24, 10, 10, 24, 35, 35, 43, 41, 7, 21, 2, 28 ]