(1)方法一
①利用es6中set容器的特点:set容器是无序不可重复的多个value的集合体,将数组作为参数传入会自动去重
②循环遍历 for(let value of target){},可遍历数组,set容器,map容器,字符串,伪数组
let arr = [1,2,3,3,4,4,5,6,6,7]
let arr1 = arr;
arr = [];
let set2 = new Set(arr1);
for(let i of set2){
arr.push(i);
}
console.log(arr);// [1, 2, 3, 4, 5, 6, 7]
(2)方法二
Array.from(v) : 将伪数组对象或可遍历对象转换为真数组
let arr = [3,3,4,5,6,1,3,5,5,6,1]
arr = Array.from(new Set(arr));
console.log(arr);// [3, 4, 5, 6, 1]
(3)方法三
三点运算符内部使用for...of循环
let arr = [3,3,4,5,6,1,3,5,5,6,1]
let arr1 = [...new Set(arr)];
console.log(arr1); //[3, 4, 5, 6, 1]
(4)方法四
reduce函数的特点
let arr = [1,2,3,4,4,1]
let arr1 = arr.reduce((pre,cur)=>{
if(!pre.includes(cur)){
return pre.concat(cur)
}else{
return pre
}
},[])
console.log(arr1);// [1, 2, 3, 4]
(5) 方法五
该方法取每一项和剩下的作对比,如果剩下的数组存在此项,则删除该项(或变成null再删除数组中值为null的项[代码内注释①])
使用的数组方法:
① arrayObject.slice(start,end:可不传) ,返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素,该方法并不会修改数组,而是返回一个子数组。。
② arrayObject.splice(index,howmany,item1,.....,itemX),方法向/从数组中添加/删除项目,然后返回被删除的项目,该方法会改变原数组。
let arr = [3,3,4,5,6,1,3,5,5,6,1]
for(let i = 0;i<arr.length-1;i++){
let item = arr[i],
args = arr.slice(i+1)
if(args.includes(item)){
//① arr[i] = null
arr.splice(i,1)
i--
}
}
//① arr = arr.filter(item => item!=null)
console.log(arr)// [4, 3, 5, 6, 1]
(6)方法六
该方法是方法五的修改版,思路是取每一项和剩下的作对比,如果剩下的数组存在此项,则将数组最后一项与他替换
let arr = [3,3,4,5,6,1,3,5,5,6,1]
for(let i = 0;i<arr.length;i++){
let item = arr[i],
args = arr.slice(i+1)
if(args.includes(item)){
arr[i] = arr[arr.length-1]
arr.length--
i--
}
}
console.log(arr)
(7)方法七
就是简单的循环套循环遍历对比
function way1(arr){
var arr1 = [arr[0]];
for(var i = 1;i<arr.length;i++){
var repeat = false;
for(var j = 0;j<arr1.length;j++){
if(arr[i] === arr1[j]){
repeat = true;
break;
}
}
if(!repeat){
arr1.push(arr[i])
}
}
return arr1;
}
(8)方法八
先排序,取出新的值与相邻的值进行对比
function way2(arr){
var arr2 = arr.sort();
var arr3 = [arr2[0]];
for(var i=1; i<arr2.length; i++){
if(arr2[i] !== arr3[arr3.length-1]){
arr3.push(arr2[i]);
}
}
return arr3;
}
(9)方法九
利用json对象的特点
function way3(arr){
var obj = {},
arr1 = [];
for(var i = 0;i < arr.length;i++){
if(!obj[arr[i]]){
obj[arr[i]] = 1;
arr1.push(arr[i]);
}
}
return arr1;
}
(10)方法十
利用数组的indexOf方法,调用时,若参数在该数组中存在,则返回该参数在数组中的下标位置。
注:此处参数与数组中的元素对比,严格采用“===”进行对比,即不做隐式的数据类型转换
function way4(arr){
var arr1 = [];
for(var i=0; i<arr.length; i++){
if(arr1.indexOf(arr[i]) == -1){
arr1.push(arr[i]);
}
}
return arr1;
}