使用 JavaScript 刪除元素出現次數超過 n 次的情況


在 JavaScript 程式設計領域,有效地管理陣列中元素的出現次數至關重要。具體來說,如果元素的出現次數超過某個閾值(由變數“n”表示),則能夠刪除該元素的例項,這可以極大地提高資料操作任務的效率和準確性。透過利用 JavaScript 的強大功能,開發人員可以採用一種強大的方法來選擇性地從陣列中刪除冗餘的元素出現。在本文中,我們將深入探討使用 JavaScript 刪除元素出現次數超過“n”次的情況的分步過程,闡明底層演算法的複雜性,並使程式設計師能夠最佳化其程式碼以提高生產力。

問題陳述

給定一個整數陣列和一個正整數 n,編寫一個 JavaScript 函式,如果陣列中任何元素的出現次數超過 n 次,則刪除該元素的所有出現。該函式應就地修改輸入陣列並返回修改後的陣列。

示例輸入 -

const arr = [1, 2, 3, 1, 2, 1, 1, 3];
const n = 2;

示例輸出 -

[1, 2, 3, 1, 2, 3]

方法

在本文中,我們將瞭解在 JavaScript 中解決上述問題陳述的幾種不同方法 -

  • 使用雜湊對映

  • 使用陣列跟蹤出現次數

  • 使用頻率對映

方法 1:使用雜湊對映

要建立雜湊對映,請從一個空物件開始。然後遍歷輸入陣列。在每次迭代中,確定元素是否作為雜湊對映中的鍵存在。如果不存在,則將其新增為新鍵並將其值設定為 1。或者,如果元素已經存在,則遞增其對應值。之後,再次遍歷輸入陣列,根據雜湊對映過濾掉計數超過給定閾值(由“n”表示)的元素。最終,返回生成的過濾陣列。

示例

函式 deleteOccurrences 以陣列 arr 和數字 n 作為輸入。它初始化一個空物件 countMap 作為雜湊對映。forEach 方法遍歷 arr,檢查每個元素 num 是否作為 countMap 中的鍵存在。如果不存在,則新增 num 作為鍵並將值設定為 1。如果存在,則將其值加 1。在建立雜湊對映後,filter 方法用於 arr 以建立一個新陣列,其中包含計數(根據 countMap)小於或等於 n 的元素。最後,將過濾後的陣列作為結果返回。

function deleteOccurrences(arr, n) {
   const countMap = {};
   arr.forEach((num) => {
      countMap[num] = (countMap[num] || 0) + 1;
   });
   return arr.filter((num) => countMap[num]-- <= n);
}
const arr = [1, 2, 4, 2, 2, 1, 3, 2, 1];
const n = 2;
console.log(deleteOccurrences(arr, n));

輸出

以下是控制檯輸出 -

[ 4, 2, 1, 3, 2, 1 ]

方法 2:使用陣列跟蹤出現次數

為了壓縮程式碼,我們首先初始化一個空陣列來儲存元素出現次數。然後,我們遍歷輸入陣列,檢查結果陣列中每個元素的出現次數。如果計數小於或等於 n,我們將元素新增到結果陣列中。最後,我們返回結果陣列。

示例

函式 deleteOccurrences 以陣列 arr 和數字 n 作為輸入。它建立一個名為 result 的空陣列,用於儲存出現次數小於或等於 n 次的元素。使用 forEach 方法,它遍歷 arr 並使用 filter 方法檢查 result 中的出現次數。如果計數小於 n,則將元素新增到 result 中。最後,它返回 result 作為輸出。

function deleteOccurrences(arr, n) {
   const result = [];
   arr.forEach((num) => {
      if (result.filter((el) => el === num).length < n) {
         result.push(num);
      }
   });
   return result;
}
const arr = [1, 2, 4, 2, 2, 1, 3, 2, 1];
const n = 2;
console.log(deleteOccurrences(arr, n));

輸出

以下是控制檯輸出 -

[ 1, 2, 4, 2, 1, 3 ]

方法 3:使用頻率對映

首先,初始化一個空對映以跟蹤元素頻率。然後,繼續遍歷輸入陣列,遞增對映中每個元素的頻率。之後,透過再次遍歷輸入陣列建立一個新陣列,只選擇頻率小於或等於給定值 n 的元素。最後,返回生成的新的陣列,其中只包含滿足頻率條件的元素。

示例

函式 deleteOccurrences 以陣列 arr 和數字 n 作為輸入。它初始化一個名為 frequencyMap 的空 Map 以儲存元素的頻率。它使用 forEach 方法遍歷 arr 並檢查每個元素 num 是否為 frequencyMap 中的鍵。如果不存在,則將其值設定為 1;否則,將其值加 1。在建立頻率對映後,它使用 filter 方法過濾輸入陣列 arr,建立一個新陣列,其中僅包含根據 frequencyMap 頻率小於或等於 n 的元素。最後,將過濾後的陣列作為結果返回。

function deleteOccurrences(arr, n) {
   const result = [];
   arr.forEach((num) => {
      if (result.filter((el) => el === num).length < n) {
         result.push(num);
      }
   });
   return result;
}
const arr = [1, 2, 4, 2, 2, 1, 3, 2, 1];
const n = 2;
console.log(deleteOccurrences(arr, n));

輸出

以下是控制檯輸出 -

[ 1, 2, 4, 2, 1, 3 ]

結論

總之,可以在 JavaScript 中有效地完成刪除超過某個閾值的元素例項的過程。透過利用條件語句和陣列操作的強大功能,可以有效地遍歷和修改陣列以刪除特定元素的過多出現。儘管這項任務起初看起來可能很艱鉅,但明智地應用這些技術使開發人員能夠減少冗餘並簡化資料結構。在 JavaScript 程式設計中採用此類策略可以大大最佳化效能並促進程式碼優雅,從而營造更流暢、更便捷的使用者體驗。

更新於: 2023-08-04

225 次瀏覽

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.