var arr=[1,44,3,5,27,3,37,3,4,5,6,7,27]
//1.将数组的每一个元素依次与其他元素做比较,发现重复元素,删除
function fn1(arr){
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){ //依次与其他比较时,j=i+1,永远在i前面一个格子,删掉一个就要j--
if(arr[i]==arr[j]){
arr.splice(j,1);
j--;
}
}
}
return arr
}
console.log(arr)
console.log(fn1(arr))
//2.借助indexOf()方法判断此元素[在该数组中首次出现的位置下标]与循环的下标是否相等,不等删除
function fn2(arr){
for(var i=0;i<arr.length;i++){
if(arr.indexOf(arr[i])!=i){
arr.splice(i,1)
i-- ; //角标回退
}
}
return arr
}
console.log(fn2(arr))
//3.借助新数组 通过indexOf方判断当前元素[在数组中的索引]如果与循环的下标是否相等,相等则添加到新数组中
function fn3(arr){
var arr3=[]
for(var i=0;i<arr.length;i++){
if(arr.indexOf(arr[i])==i){
arr3.push(arr[i])
}
}
return arr3
}
console.log(fn3(arr))
//4.利用数组中的filter方法:filter的3个属性 filter(function(value,index,arr))==>
//value当前元素值,角标,当前元素属于的数组对象(值重复可能会有多个数组对象)
var arrNew=arr.filter(function(value,index,arr){
return arr.indexOf(value)==index
})
console.log(arrNew)
//5.利用空对象来记录新数组中已经存储过的元素
var obj={};
var arr5=[]
for(var i=0;i<arr.length;i++){
if(!obj[arr[i]]){
obj[arr[i]]=true;
arr5.push(arr[i])
}
}
console.log(arr5 )
//6.借助新数组,判断新数组中是否存在该元素如果不存在则将此元素添加到新数组中
function fn6(arr){
var newArr=[];
for(var i=0;i<arr.length;i++){
if(newArr.indexOf(arr[i])==-1){
newArr.push(arr[i]);
}
}
return newArr //注意newArr和arr之间的关系
}
console.log(fn6(arr))
//7.借助新数组,判断新数组中是否存在该元素如果不存在则将此元素添加到新数组中(原数组长度不变但被按字符串顺序排序)
function fn7(arr){
var sort=[];
var end;
arr.sort();
end=arr[0];
sort.push(arr[0]);
for(var i=0;i<arr.length;i++){
if(arr[i]!=end){
sort.push(arr[i]);
end=arr[i];
}
}
return sort;
}
console.log(fn7(arr))
//8.没有借助新数组直接改变原数组,并且去重后的数组被排序
function fn8(arr){
var end;
arr.sort();
end=arr[0];
for(var i=1;i<arr.length;i++){ //记得从i=1开始循环,不然会得到空
if(arr[i]==end){
arr.splice(i,1);
i--;
}else{
end=arr[i];
}
}
return arr;
}
console.log(fn8(arr))
//9.双层循环发现重复的删除
function fn9(arr){
for(var i=0;i<length;i++){
for(var j=0;j<length;j++){ //只是双重循环,不用比较,所以同步即可,删掉对运行无影响
if(arr[i]==arr[j] && i!=j){
arr.splice(arr[i]);
}
}
}
return arr;
}
console.log(arr)
//10.借助新数组重复角标判断,无需函数
var newArr=[];
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[i]==arr[j]){
newArr.push(j);
}
}
if(newArr.length==0){
newArr.push(arr[i])
}
}
console.log(arr)
//11.借助ES6 set不能接受重复字符的特点
function fn11(arr){
var newArr=[];
var set1=new set(arr);
for(var val of set1){
newArr.push(val);
}
return newArr;
}
console.log(arr)