js中实现数组去重的方法

216 阅读1分钟

JavaScript 数组去重的方法

方法一: 两层for语句遍历判断

简单思路: 从数组第一个元素开始,每一次循环拿数组的下一个元素与其之后的每个元素都进行遍历比较,如果存在相同的元素,则通过splice()将其删除并从删除的索引位置开始继续比较(因为splice()删除后,后面元素往前移)。

//定义一个有重复数据的数组
let arr = [1,2,1,'j',5,'1',true,2,5,'h',true];
//去重方法
function duplicateRemoval(arr) {
    for(let i = 0;i<arr.length;i++){
        for (let j = i+1; j < arr.length; j++) {
            if (arr[i]===arr[j]) {
            	//删除满足条件的元素
                arr.splice(j,1);
                //因为当前索引值的元素被删除,且后面元素往前移  我们需要将下一次遍历索引从但当前索引开始,即j--
                j--;
            }
        }
    }
}
//方法调用
duplicateRemoval(arr);
//结果验证
console.log(arr);

方法二: 通过数组API indexOf()进行筛选

  • indexOf()方法 返回数组中值为其参数的数组索引,不存在则返回-1。

  • 简单思路: 首先,定义一个新数组用于接收去重后的原数组元素。 然后,遍历判断新数组中是否存在当前原数组元素,若不存在(即indexOf()返回-1)则通过push()方法将该元素存到新数组的最后位置。

//定义一个有重复数据的数组
let arr = [1,2,1,'j',5,'1',true,2,5,'h',true];
//去重方法
function duplicateRemoval(arr) {
	//定义接收去重后结果的新数组
    let newArr = [];
    for(let i = 0;i<arr.length;i++){
    	//判断新数组中是否存在当前索引为i的原数组元素
        if (newArr.indexOf(arr[i])===-1) {
        	//如果不存在,则将其放到新数组的最后位置
            newArr.push(arr[i]);
        }
    }
    //返回去重后的新数组
    return newArr;
}
//打印方法执行返回结果
console.log(duplicateRemoval(arr));

方法三: 通过数组API includes()进行筛选

  • includes()方法 判断数组中是否存在值为其参数的元素,若存在则返回true,不存在则返回false。

  • 简单思路: 与方法二类似,当新数组中不存在当前遍历的原数组元素时,将其插入到新数组中。

//定义一个有重复数据的数组
let arr = [1,2,1,'j',5,'1',true,2,5,'h',true];
//去重方法
function duplicateRemoval(arr) {
	//定义接收去重后结果的新数组
    let newArr = [];
    for(let i = 0;i<arr.length;i++){
    	//判断新数组中是否存在当前索引为i的原数组元素
        if (!newArr.includes(arr[i])) {
        	//如果不存在,则将其放到新数组的最后位置
            newArr.push(arr[i]);
        }
    }
    //返回去重后的新数组
    return newArr;
}
//打印方法执行返回结果
console.log(duplicateRemoval(arr));

方法四: 通过Set对象进行过滤

Set类似于数组,但是成员的值都是唯一的,没有重复的值。
简单思路:用数组初始化一个Set对象set,然后再将其转化为数组即可去除数组中重复的元素。

//定义一个有重复数据的数组
let arr = [1,2,1,'j',5,'1',true,2,5,'h',true];
//定义set对象,并用数组arr对其进行初始化
let set = new Set(arr);
//通过Array.from()方法将 set 转化为数组 并赋给新数组
let newArr = Array.from(set);
//打印结果
console.log(newArr);

方法五:利用数组中filter方法

filter() 方法创建一个新的数组,原数组的每个元素传入回调函数中,回调函数中有return返回值,若返回值为true,这个元素保存到新数组中;若返回值为false,则该元素不保存到新数组中;原数组不发生改变。

var arr = [5,6,8,8,6,8,6];

          var newArr = arr.filter((items,index,arry)=>//按照某个条件过滤,返回满足条件的新数组

              return arry.indexOf(items) === index //过滤掉下标相同的值
          })
        console.log(newArr)

方法六:利用对象的特性(唯一性),不能出现相同的key值

var arr = [5,6,8,8,6,8,6];        
        function reRepeat(arr){            var obj={};            var newArr=[];            for(var i = 0;i < arr.length;i ++){                if(!obj[arr[i]]){
                    obj[arr[i]]=1;
                    newArr.push(arr[i]);
                }
            }            return newArr;
        }

        console.log(reRepeat(arr))

方法七:排序后利用相邻的元素进行判断然后push

var arr = [5,5,6,8,8,6,8,6];        
function reRepeat(arr){
       arr.sort( ( a , b ) => { return a - b; } )  //将数组进行排序      
       var newArr=[];            
       for(var i = 0;i < arr.lengthi++){                
       if(arr[i]!=arr[i+1]){
                    newArr.push(arr[i]);
                }
            }            return newArr;
        }

        console.log(reRepeat(arr))

总结

以上便是数组去重的几种方法,简单实用,能够应付相关的面试题。