移除JavaScript数组中任何数字/元素的奇数次出现


假设我们有一个这样的数字数组:

const arr = [1, 6, 3, 1, 3, 1, 6, 3];

我们需要编写一个JavaScript函数,它只接收一个这样的数组作为参数。然后,函数应该查找数组中出现奇数次(不包括只出现一次)的所有数字。

例如:

在上面的数组中,数字1和3都出现了3次(奇数),因此我们的函数应该删除这两个数字的第三次出现。

输出数组应该如下所示:

const output = [1, 6, 3, 1, 3, 6];

我们将准备一个哈希表来跟踪每个数字出现的次数,最后我们将遍历该表以删除出现奇数次的数字的最后一次出现。

我们映射中的每个键都将保存一个数组值,该数组的第一个元素将是该元素出现的次数,第二个元素将是它最后出现时的索引。

示例

代码如下:

 在线演示

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]

更新于:2021年2月22日

208 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告