JavaScript 快速从数组中,删除重复超过2次的元素

40 阅读1分钟

可能有人被问过这样的题,来考验你对前端技术的基础知识。我们来简单的写两个实现方式

快速从数组中,删除重复超过2次的元素
示例一
function removeDuplicates(data) {
  let news1 = [];
  let news2 = [];
  data.forEach((item, index) => {
      if (news1.indexOf(item) === -1) {
        news1.push(item);
      } else {
        if (news2.indexOf(item) === -1) {
          news2.push(item);
        } else {
          data.splice(index, 1);
        }
    }
  });
  console.log(data);
}
let list = [1, 2, 1, 1, 2, 2, 3];
removeDuplicates(list);  // 输出: [1, 1, 2, 2, 3]

注:这种简单易懂的处理方式可以实现要求,但是 data.splice(index, 1) 个别情况下会导致数组长度变化,从而影响循环的正确性

示例二
function removeDuplicates(arr) {
  // 使用 Map 来记录每个元素出现的次数
  const countMap = new Map();
  // 使用数组来存储结果
  const result = [];

  arr.forEach(item => {
    // 获取当前元素的计数,默认为 0
    const count = countMap.get(item) || 0;

    // 如果当前元素的计数小于 2,则将其添加到结果数组
    if (count < 2) {
      result.push(item);
    }

    // 更新当前元素的计数
    countMap.set(item, count + 1);
  });

  return result;
}

const list = [1, 2, 1, 1, 2, 2, 3];
console.log(removeDuplicatesMoreThanTwice(list)); // 输出: [1, 1, 2, 2, 3]

解释:

  • 使用 Map 对象 countMap 来记录每个元素的出现次数。
  • 使用数组 result 来存储最终的结果。
  • 遍历数组 arr 获取当前元素 item 的计数,默认为 0。如果当前元素的计数小于 2,则将其添加到结果数组 result 中。
  • countMap.set(item, count + 1):更新当前元素 item 的计数。
  • 这种效率更高且代码更简洁