大学四年,我总结了一些常用的JS数组去重的方法,记录成长【面试必备】

Mercia ·
更新时间:2024-09-20
· 858 次阅读

写在前面:

我们要想使用数组去重,那就必须对数组有一定的了解,关于JS数组的一些方法以及使用,可参考:
①JavaScript 内置对象之-Array
②ES5新增数组方法
③浅谈JavaScript中ES6新增的Set和Map结构以及Array.from方法

下面进入正题:利用JS的数组实现去重的目的

        JS数组去重方法有很多,相信一些小伙伴也掌握了好多种方法,那接下来我就介绍一些比较常用的方法供大家参考。

方法1:使用indexOf()方法去除重复的元素

        indexOf方法返回给定元素在数组中第一次出现的位置,返回结果是匹配开始的位置。如果没有出现则返回-1

例:

var arr = [1,1,2,2,3,3,4,4]; var newArr = []; for(var i=0,len=arr.length;i<len;i++){ if(newArr.indexOf(arr[i]) == -1){ newArr.push(arr[i]); } } console.log(newArr);

结果:
在这里插入图片描述

方法2:使用lastIndexOf()方法去除重复的元素 lastIndexOf方法返回给定元素在数组中最后一次出现的位置,如果没有出现则返回-1; lastIndexOf方法的用法跟indexOf方法一致,主要的区别lastIndexOf从尾部开始匹配,indexOf则是从头部开始匹配; 另外,lastIndexOf的第二个参数表示从该位置起向前匹配。

例:

function noRepeat(arr) { var res = []; for (var i = 0; i < arr.length; i++) { res.lastIndexOf(arr[i]) !== -1 ? '' : res.push(arr[i]); } return res; } console.log(noRepeat([1, 1, 2, 2, 3, 3, 4, 4]));

结果:
在这里插入图片描述

方法3:使用filter()与indexOf()方法去除重复的元素 filter方法用于过滤数组成员,满足条件的成员组成一个新数组返回; 它的参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回; 该方法不会改变原数组; filter方法的参数函数可以接受三个参数:当前成员,当前位置和整个数组; filter()去除重复元素依靠的是indexOf的属性,即总是返回第一个元素的位置,后面的重复元素位置与indexOf返回的位置不相等,所以filter()可以过滤掉它们。

例:

var arr = [1,1,2,2,3,3,4,4]; var newArr = arr.filter(function(value,index,self){ return self.indexOf(value) === index; }); console.log(newArr);

结果:
在这里插入图片描述

方法4:使用ES6提供的Set结构去除重复的元素

        主要利用Set结构不能接收重复数据的特点。

例:

var arr = [1,1,2,2,3,3,4,4]; function noRepeat(arr){ var newArr = []; var myset = new Set(arr); for(var val of myset){ newArr.push(val); } return newArr; } var arr2 = noRepeat(arr); console.log(arr2);

结果:
在这里插入图片描述

方法5:使用ES6提供的Set与扩展运算符去除重复的元素

        ES6的出现,真真是极方便的~~~

例:

var arr = [1,1,2,2,3,3,4,4]; function norepeat(arr) { let set = new Set(arr); arr = [...set]; return arr; } console.log(norepeat(arr));

结果:
在这里插入图片描述

方法6:使用set与Array.from()方法去除重复的元素

        Array.from方法可以将 Set 结构转为数组。

例:

var arr = [1,2,2,2,3,3,4,4]; var newArr = Array.from(new Set(arr)); console.log(newArr);

结果:
在这里插入图片描述

方法7:使用splice()方法与双层循环去除重复的元素

        splice()方法用于删除原数组的一部分成员,并可以在删除的位置添加新的数组成员,返回值是被删除的元素。

例:

var arr = [1,1,2,2,3,3,4,4]; function noRepeat(arr){ for (var i = 0; i < arr.length; i++) { for (var j = 0; j < arr.length; j++) { if (arr[i] == arr[j] && i != j) { arr.splice(j, 1); } } } return arr; } var arr2 = noRepeat(arr); console.log(arr2);

结果:
在这里插入图片描述

方法8:使用includes()方法去除重复的元素

         includes()方法用于判断字符串是否包含指定的子字符串,如果找到匹配的字符则返回true,否则返回false。

例:

function noRepeat(arr) { var newArr = []; for (var i = 0; i < arr.length; i++) { if (!newArr.includes(arr[i])) { newArr.push(arr[i]); } } return newArr; } console.log(noRepeat([1,1,2,2,3,3,4,4]));

结果:
在这里插入图片描述

方法9:使用forEach()和includes()方法去除重复的元素 forEach方法是对数组的所有成员依次执行参数函数。但是,forEach方法不返回值,只用来操作数据。 forEach的参数是一个函数,该函数同样接受三个参数:当前值、当前位置、整个数组。

例:

function noRepeat(arr) { var newArr = []; arr.forEach(item => { return newArr.includes(item) ? '' : newArr.push(item) }); return newArr; } console.log(noRepeat([1,1,2,2,3,3,4,4]));

结果:
在这里插入图片描述

方法10:利用空对象来记录新数组中已经存储过的元素

例:

var arr = [1,1,2,2,3,3,4,4]; var obj={}; var newArr=[]; for(var i=0;i<arr.length;i++){ if(!obj[arr[i]]){ obj[arr[i]]=true; newArr.push(arr[i]); } } console.log(newArr);

结果:
在这里插入图片描述

方法11:使用sort()方法去除重复的元素

        使用sort()方法先将原数组排序,然后与相邻的进行比较,如果不同则存入新数组。(原数组长度不变,但要注意:sort方法不是按照大小排序,而是按照字典顺序)

例:

var arr = [1,1,2,2,3,3,4,4]; function noRepeat(arr) { var ret = [], res; arr.sort(); res = arr[0]; ret.push(arr[0]); for (var i = 1; i < arr.length; i++) { if (arr[i] != res) { ret.push(arr[i]); res = arr[i]; } } return ret; } var arr2 = noRepeat(arr); console.log(arr2);

结果:
在这里插入图片描述

鄙人才疏学浅,如有纰漏,望各路巨佬不吝赐教~


作者:huangfuyk.



面试 js数组去重 js数组 方法 大学 js

需要 登录 后方可回复, 如果你还没有账号请 注册新账号