<script>
var arr = [1,1,1,2,2,12,12,1,1,"a","a","a","c","c","你","你","我","我"];
//第一种,通过双层循环删除后面与其相等的元素,
function qucg1(arr){
for(var i=0;i<arr.length-1;i++){ //循环遍历数组
for(var j=i+1;j<arr.length;j++){//判断i位置后有没有与i位置上相等的数
if(arr[i]==arr[j]){ //如果相等,就删除该位置上的数
arr.splice(j,1);
j--; //删除后,j--使其回到该位置上继续往后查找与i位置上的数,直到没有与i位置上的数相等的,j循环结束,i++
}
}
}
console.log(arr);
}
//第二种,通过关联数组key值唯一性的特性来筛选
function qucg2(arr){
for(var i=0,hash=[],b=[];i<arr.length;i++){ //循环遍历数组
if(hash[arr[i]]==undefined){ //如果hash中下表为arr[i]的值为undefined,
hash[arr[i]]=0; //并且hash数组中下标为arr[i]的value值为0(0这个值可以是任何值只要不为空)
b[b.length]=arr[i]; //那么就把arr[i]添加到数组b中,
}
}
console.log(b);
}
//第三种,先排序删除相邻相等的元素
function qucg3(){
arr.sort(); //先给数组排序,
for(var i=0;i<arr.length-1;i++){//循环遍历数组
if(arr[i]==arr[i+1]){ //如果相邻的数与其相等就删除相邻的元素
arr.splice(i+1,1);
i--; //回到原位置继续判断相邻位置的元素是否相等,
}
}
console.log(arr);
}
//第四种,通过对象属性值的唯一特性进行筛选,原理和关联数组一样
function qucg4(arr){
var rest = [];
var obj = {}
for(var i=0;i<arr.length;i++){
if(!obj[arr[i]]){
obj[arr[i]]=1;
rest.push(arr[i]);
}
}
console.log(rest);
}
//第五种,通过indexof()APi查找该元素的位置
function qucg5(){
for(var i=0;i<arr.length;i++){ //循环遍历数组
var index=arr.indexOf(arr[i],i+1);//定义一个index 用来接收indexOf()找到的元素位置,没找到就返回-1 并且是从i+1位置开始查找的
if(index!=-1){ //如果返回的不是-1就说明有相等的元素
arr.splice(index,1); //删除该位置上的元素
i--;
}
}
console.log(arr);
}
//第六种,
function qucg6(){
}
qucg5(arr);
</script>