数组的去重方法,其实无论实在实际项目还是在面试中都会有用到的,下面我们来列举一下常见的几个:
- 使用 for 循环和 includes
- 使用 Set 和 Array.from()
- 使用 for 循环和 indexOf
- for 循环嵌套 for 循环,结合 splice
- 使用 sort 和 reduce 方法
- 使用 filter 和 indexOf
- 使用 forEach 循环和 Map
- 使用 reduce 和 includes
- 使用扩展运算符和 set
- 如果是数组对象的数据格式,可以使用 forEach 和 includes 的方法
1. 使用 for 循环和 includes
functionunique(arr){let newArr=[]for(let i=0; i< arr.length;i++){if(!newArr.includes(arr[i])){
newArr.push(arr[i])}}return newArr;}
2. 使用 Set 和 Array.from()
functionunique(arr){return Array.from(newSet(arr))}
3. 使用 for 循环和 indexOf
functionunique(arr){let newArr=[]for(let i=0; i< arr.length; i++){if(newArr.indexOf(arr[i])===-1){
newArr.push(arr[i])}}return newArr;}
4. for 循环嵌套 for 循环,结合 splice
functionunique(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--;}}}return arr;}
5. 使用 sort 和 reduce 方法
functionunique(arr){let newArr=[arr[0]];
arr.sort().reduce((prev, next)=>{if(prev!== next){
newArr.push(next)}return next;})return newArr;}
6.使用 filter 和 indexOf
functionunique(arr){return arr.filter((item, index, arr)=>{return arr.indexOf(item,0)=== index})}
7.使用 forEach 循环和 Map
functionunique(arr){let map=newMap();let array=[];
arr.forEach(item=>{if(!map.has(item)){
map.set(item,true);
array.push(item)}})return array;}
8.使用 reduce 和 includes
functionunique(arr){return arr.reduce((newArr, next)=>{if(!newArr.includes(next)){
newArr.push(next)}return newArr;},[])}
9.使用扩展运算符和 set
functionunique(arr){return[...newSet(arr)]}
10.如果是数组对象的数据格式,可以使用 forEach 和 includes 的方法
functionuniqueArrayObj(arr, key){let newArr=[arr[0]]
arr.forEach(item=>{
newArr.filter(newitem=>{if(item[key]!== newitem[key]){
newArr.push(item)}})})return newArr;}
当然,还有一些其他方法,但是这里就不多做赘述了。其实这些方法总结一下,它们的去重思想都大同小异,比如说:
1、3、5、6、7、8、10 的解题思路都是新生成一个数组,然后判断新数组是否包含当前值,若没有包含,则把这个值 push 进去,反之则不用 push,最后把新数组返回去。那按照这个思路,我们可以调用的 API 方法就有很多了(如上)。
那剩下的 2、4、9 这三个相对来说是借助了 ES6 里的一些新特性来做的,更加的方便快捷。