方法1:双重for循环去重
//定义一个数组
var arr =['1','2','3','4','5','6','2','2','2','1','1','1'];
//前一项
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--;
}
}
}
console.log('arr',arr);//打印结果:['1', '2', '3', '4', '5', '6']
方法2 : 使用new Set唯一性去重
var arr2 =['1','2','3','4','5','6','2','2','2','1','1','1'];
let newArray2=[...new Set(arr2)];
console.log('newArray2',newArray2);//打印结果:['1', '2', '3', '4', '5', '6']
方法3:利用indexOf去重
定义一个空数组array,对这个空数组array使用indexOf()方法判断是不是存在指定元素
这个指定元素是外部数组中传进来的元素
array中不存在,返回-1,存在,则返回元素对应的下标
indexOf方法返回的值是-1时,将传进来的元素添加进这个array数组中
返回的值不是-1时,表示这个元素在array中已经存在,就不添加了
var arr3 = ['1','2','3','4','5','6','2','2','2','1','1','1'];
var newArray3 = [];
for(var i=0;i<arr3.length;i++){
if(newArray3.indexOf(arr3[i]) === -1){
//如果没有找到就返回-1,就把返回-1的值添加到新数组中
newArray3.push(arr3[i]);
}
}
console.log('newArray3',newArray3);//打印结果:['1', '2', '3', '4', '5', '6']
方法4:使用filter去重
var arr4 = ['1','2','3','4','5','6','2','2','2','1','1','1'];
let newArray4 = arr4.filter((item, index, arr)=>{
//当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素
return arr.indexOf(item)==index;
})
console.log("newArray4",newArray4);
方法5:利用map数组结构去重
var arr5 = ['1','2','3','4','5','6','2','2','2','1','1','1'];
let map = new Map();
let newArray5 = new Array();
for(let i = 0;i < arr5.length;i++){
if(map.has(arr5[i])){//如果有该key值
map.set(arr5[i],true);
}else{
map.set(arr5[i],false);//如果没有该key值
newArray5.push(arr5[i]);
}
}
console.log("newArray5",newArray5);//打印结果:['1', '2', '3', '4', '5', '6']
方法6:使用sort方法
sort() 方法用于对数组的元素进行排序。默认排序顺序为按字母升序。
去重原理是,拿一个数组存储去重后的元素,
拿这个去重数组中最后一个元素和原数组中已经去重的元素的后面一个元素比较,
不相同,则将原数组中的元素添加进去重数组。
var arr6 = ['1','2','3','4','5','6','2','2','2','1','1','1'];
arr6 = arr6.sort();//从小到大排序
var newArray6 = [];
for(let i=0;i<arr6.length;i++){
if(arr6[i] !== arr6[i-1]){
newArray6.push(arr6[i]);
}
}
console.log("newArray6",newArray6);//打印结果:['1', '2', '3', '4', '5', '6']
方法7:利用includes方法
includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
var arr7 = ['1','2','3','4','5','6','2','2','2','1','1','1'];
var newArray7 = [];
for(let i=0;i<arr7.length;i++){
if(!newArray7.includes(arr7[i])){
//如果不包含为true,则添加到新数组
newArray7.push(arr7[i]);
}
}
console.log("newArray7",newArray7);
方法8:利用对象去重
利用对象不能存储重复属性的特性(哈希思想)
var arr8 = ['1','2','3','4','5','6','2','2','2','1','1','1'];
var obj = {};//定义一个空对象
var newArray8 = [] //定义一个空数组
for(let i of arr8){
if(!obj[i]){
newArray8.push(i);
obj[i]=true;
}
}
console.log("newArray8",newArray8);//打印结果:['1', '2', '3', '4', '5', '6']
方法9:includes()+forEach()
forEach() 方法用于调用数组的每个元素,对每个元素进行操作
var arr9 = ['1','2','3','4','5','6','2','2','2','1','1','1'];
var newArray9 = [] //定义一个空数组
arr9.forEach((item)=>{
if(!newArray9.includes(item)){
return newArray9.push(item);
}
})
console.log("newArray9",newArray9);//打印结果:['1', '2', '3', '4', '5', '6']
方法10:利用递归去重
var arr10 = ['1','2','3','4','5','6','2','2','2','1','1','1'];
var len = arr10.length;
//排序后方便去重
arr10.sort((a,b)=>{
return a-b;
})
//递归Recursion,然后数组去重
function Recursion(index){
if(index >= 1 ){
if(arr10[index]===arr10[index-1]){
arr10.splice(index,1);
}
Recursion(index-1);
}
}
Recursion(len-1);
console.log("arr10",arr10);//打印结果:['1', '2', '3', '4', '5', '6']
方法11:使用布尔类型判断是否重复
var arr11 = ['1','2','3','4','5','6','2','2','2','1','1','1'];
var newArray11 = [arr11[0]];//先开始存储数组第一个值
for(var i=1;i<arr11.length;i++){
var isRepeat=false;//定义开关为false
for(var j=0;j<newArray11.length;j++){
//外层for循环初始为第二个值的每一项开始与内层循环初始为第一个值的每一项进行对比,如果对比成功就设置开关为true,暂停这次内层循环,继续执行上下文执行
if(arr11[i] === newArray11[j]){
isRepeat = true;
break;
}
}
if(!isRepeat){
newArray11.push(arr11[i]);
}
}
console.log("newArray11",newArray11);//打印结果:['1', '2', '3', '4', '5', '6']