今天就来总结下,处理数组去重的时候想到的一些方法,后面要是还能想到啥或者看到啥新的,会再次添加:
1.indexOf的方法
var arr=[1,1,7,2,7,4,8,4] var newArr=[]; for(var i=0;i<arr.length;i++){ if(newArr.indexOf(arr[i])==-1){ newArr.push(arr[i]); } } console.log(newArr)
这种方法就是利用indexOf查找新数组中是否有相应的arr[i],若没有的话就会返回-1,则在newArr中push.arr[i]
2.依旧利用indexOf判断其与数组下标的关系,来选择是否向新数组中push:
var arr=[1,1,7,2,7,4,8,4] var newArr=[]; for(var i=0;i<arr.length;i++){ if(arr.indexOf(arr[i])==i){ newArr.push(arr[i]); } } console.log(newArr)
3.使用sort方法来处理:
var arr=[1,1,7,2,7,4,8,4] arr.sort() var newarr=[arr[0]]; for(var i=0;i<arr.length;i++){ if(arr[i]!=newarr[newarr.length-1]){ newarr.push(arr[i]); } } console.log(newarr)
4.双层循环+splice:
var arr=[1,1,7,2,7,4,8,4] function theme(arr){for(var i=0,len=arr.length;i<len;i++){ for(var j=i+1,length=arr.length;j<length;j++){ if(arr[i]==arr[j]){ arr.splice(j,1) j--;//删除一个数,j就减1 length--;//j值减小时,lenth的值也减1 } } } return arr} console.log(theme(arr))
5.set方式:
var arr=[1,1,7,2,7]; function theme(arr){ var x=new Set(arr); return[...x]; }; console.log(theme(arr))
set真的是yyds..简单几句解决..ES6提供了一种新的数据结构Set,它类似于数组,但是成员的值都是唯一的,没有重复的值,且set本身就是一个构造函数,用来生成Set数据结构.
6.filter方式:
var arr=[1,1,7,2,7];
var newarr=arr.filter(function(element,index,self){
return self.indexOf(element) === index;
});
console.log(newarr);
解释下,这三个参数,第一个是表示arr中的某元素,第二个参数表示元素在数组中的位置,第三个表示数组本身.
7.includes方法:
var arr=[1,1,7,2,7]; function theme(arr){ var newarr=[]; for(var i=0;i<arr.length;i++){ if(!newarr.includes(arr[i])){ newarr.push(arr[i]) } } return newarr } console.log(theme(arr))
includes()方法的作用是,来判断一个数组是否包含一个特定的值.如果是的话,返回true,否则false