总结一下数组去重的几个方法

方法1:

关键词:双for循环、splice
思 路:将数组中的值一个个的比较,重复的就删掉
复杂度:O(n^2)

function removeDup(array) {
    for (var i = array.length-1; i>=1; i--){
        for(var j = i-1; j>=0; j--){
            if(array[j] == array[i])
                array.splice(j,1);
        }
    }
    return array;
}

a = [1,1,2,2,2,3,3,4];
removeDup(a);
// [1, 2, 3, 4]

方法2:

关键词 indexOf、push
思路:设置一个新数组,根据indexOf筛选原数组,只要新数组中没有的,就push到新数组
复杂度:O(n)

function removeDup(array) {
    var newArray = [];
        for(var i = 0; i < array.length;i++){
            if(newArray.indexOf(array[i]) == -1 ) {
                newArray.push(array[i]);
            }
        }
    return newArray;
}

a = [1,1,2,2,2,3,3,4];
removeDup(a);
// [1, 2, 3, 4]

方法3:

关键词 es6 Set、Array.from
思 路:
Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化,其成员的值都是唯一的,没有重复的值。
Array.from()方法可以将类数组对象和可遍历(iterable)的对象转化为真正的数组。

function removeDup(a) {
  return Array.from(new Set(a));
}

a = [1,1,2,2,2,3,3,4];
removeDup(a);
// [1, 2, 3, 4]

总结
在前端面试中,数组去重还是一个出现频率比较高的题目,算是一种基本能力吧。以上方法,在我看来,还是比较容易理解的,还有一些其他方法,正在整理中,会陆续更新。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容