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

方法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]

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

你可能感兴趣的:(总结一下数组去重的几个方法)