返回

彻底杜绝重复元素:来这里就对啦!

前端

消灭重复元素的万全之策

重复元素总是如影随形,让我们的数据处理变得复杂而繁琐。但是,不用担心!我们为你准备了市面上所有有效的去重复方法,助你轻松去除重复元素,让数据焕然一新。

一、简单去重:最基础的起点

简单去重法就像是一位经验丰富的清洁工,它逐一检查数组中的元素,将重复的元素逐个剔除。这种方法虽然简单,却非常有效,尤其适用于小规模数组的去重操作。

function simpleUnique(array) {
  let uniqueArray = [];
  for (let i = 0; i < array.length; i++) {
    if (uniqueArray.indexOf(array[i]) === -1) {
      uniqueArray.push(array[i]);
    }
  }
  return uniqueArray;
}

二、ES6 最简洁去重:一劳永逸的解决之道

ES6 的出现为我们带来了许多简洁而强大的语法特性,其中之一就是 Set 数据结构。Set 具有自动去重的特性,这意味着它可以轻松去除数组中的重复元素。

const uniqueArray = [...new Set(array)];

三、filter+indexOf 去重:灵活多变的去重利器

filter+indexOf 组合技是另一个非常实用的去重方法。它利用 filter 函数过滤出数组中不包含重复元素的项,并利用 indexOf 函数检查每个元素是否已经存在于数组中。

function uniqueWithFilter(array) {
  return array.filter((item, index) => array.indexOf(item) === index);
}

四、reduce+includes 去重:函数式编程的去重之美

reduce+includes 组合技将函数式编程的思想与数组去重的需求巧妙地融合在一起。它使用 reduce 函数将数组中的元素逐个累积到一个新的数组中,同时利用 includes 函数检查每个元素是否已经存在于累积数组中。

function uniqueWithReduce(array) {
  return array.reduce((uniqueArray, item) => {
    if (!uniqueArray.includes(item)) {
      uniqueArray.push(item);
    }
    return uniqueArray;
  }, []);
}

五、for 嵌套 for+splice 去重(ES5):经典之作,永不过时

虽然 ES6 的出现为我们带来了许多简洁而强大的语法特性,但对于一些浏览器兼容性要求较高的场景,我们仍然需要使用经典的 for 嵌套 for+splice 组合技来实现数组去重。

function uniqueWithNestedFor(array) {
  for (let i = 0; i < array.length; i++) {
    for (let j = i + 1; j < array.length; j++) {
      if (array[i] === array[j]) {
        array.splice(j, 1);
        j--;
      }
    }
  }
  return array;
}

结语

无论你是想要处理简单的小规模数组,还是需要应对庞大而复杂的数组,我们为你提供的这些去重复方法都能满足你的需求。根据你的具体场景和需求,选择最适合你的方法,让重复元素彻底消失,让你的数据更加纯净。