JS中数组去重的七方法

        数组去重方法

 <script type="text/javascript">

       方法零:运用set结构特点:存储的数据没有重复的

/*var arr=[11,4,7,20,5,800,3,6,9];
var temp;
for(var i=0;i<arr.length;i++){
var minIndex=i;//假设i的值为最小值的索引;
for(var j=i+1;j<arr.length;j++){
if(arr[j]<arr[minIndex]){//最小值的索引;
minIndex=j;//
}
}
if(i!=minIndex){//判断最小的索引是否等价于假设的索引。
temp=arr[i];
arr[i]=arr[minIndex];
arr[minIndex]=temp;
}
}*/
/*alert(arr);
alert(arr.sort(function (a,b){
return a-b;
}));*/

        var arr = [1,1,2,1,3,4,5];

/*function selectSort(arr){
var temp;
for(var i=0;i<arr.length;i++){
var minIndex=i;//假设i的值为最小值的索引;
for(var j=i+1;j<arr.length;j++){
if(arr[j]<arr[minIndex]){//最小值的索引;
minIndex=j;//
}
}
if(i!=minIndex){//判断最小的索引是否等价于假设的索引。
temp=arr[i];
arr[i]=arr[minIndex];
arr[minIndex]=temp;
}
}
return arr;
}
var arr=[11,4,7,20,5,800,3,6,9];
alert(selectSort(arr));*/

        var set = new Set(arr);

//插入排序
/*var arr=[11,4,7,20,5,800,3,6,9];
var temp;
for(var i=0;i<arr.length;i++){
var minIndex=i;//假设i的值为最小值的索引;
var min=arr[minIndex];//最小值
for(var j=i+1;j<arr.length;j++){
if(arr[j]<min){//最小值的索引;
temp=arr[j];
arr[j]=min;
min=temp;
}
}
console.log(min);//3,4,5,6,7,9,11,20,800
arr[i]=min;//i=0-8
}
alert(arr);*/
//快速排序: 数组的方法(splice/push/concat)+递归+Math数学方法。
//Math.floor();向下取整,Math.floor(1.99)==1
//Math.ceil();向上取整,Math.ceil(1.009)==2
/*function quicksort(array){
if(array.length<=1){//如果数组的长度为1,返回当前的数组。
return array;
}
var left=[];//存放小于中间值的元素;
var right=[];//存放大于中间值的元素;
var midIndex=Math.floor(array.length/2);//取中间的索引
//var minValue=array[midIndex];
var minValue=array.splice(midIndex,1);//取中间的索引对应的值。
//var minValue=array.slice(midIndex,midIndex+1);
for(var i=0;i<array.length;i++){
if(array[i]<minValue){
left.push(array[i]);
}else if(array[i]>=minValue){//=相同的元素放置right数组里面。
right.push(array[i]);
}
}

        console.log(set)

金沙官网线上,return quicksort(left).concat(minValue,quicksort(right));

 

}
var arr=[11,4,4,4,4,4,7,20,9,9,9,9,5,800,3,6,4,9];

 

alert(quicksort(arr));*/

        方法一:运用splice()方法和双层for循环(有点类似选择排序)

/*var arr=[11,4,4,4,4,4,7,20,9,9,9,9,5,800,3,6,4,9];
var newarr=[];
newarr.push(arr[0]);//newarr=[11,4];
for(var i=1;i<arr.length;i++){
var bstop=false;//不重复
for(var j=0;j<newarr.length;j++){
if(arr[i]==newarr[j]){
bstop=true;//重复
break;//跳出循环
}
}
if(!bstop){
newarr.push(arr[i]);
}
}
alert(newarr);*/

            function norepeat(arr){

/*function norepeat(array){
var newarr=[];
newarr.push(array[0]);//newarr=[11,4];
for(var i=1;i<array.length;i++){
var bstop=false;//不重复
for(var j=0;j<newarr.length;j++){
if(array[i]==newarr[j]){
bstop=true;//重复
break;//跳出循环
}
}
if(!bstop){
newarr.push(array[i]);
}
}
return newarr;
}*/

                for(var i = 0;i < arr.length-1;i++){

//var arr=[11,4,4,4,4,4,7,'a',9,9,9,9,5,800,3,6,4,9];
//alert(arr.indexOf(4,7));//7代表数组的索引。
//indexOf() 第一个参数:数组的元素,返回元素对应第一个找到的索引, 第二个参数:从那个位置开始查找。

                    for(var j = i+1;j<arr.length;j++){

//alert(arr.indexOf('b'));//-1 没有找到返回-1.
/* var arr=[11,4,4,4,4,4,7,'a',9,9,9,9,5,800,3,6,4,9];
var newarr=[];
newarr.push(arr[0]);
for(var i=1;i<arr.length;i++){
if(newarr.indexOf(arr[i])==-1){
newarr.push(arr[i]);
}
}
alert(newarr);
*/
</script>

                        if(arr[i] == arr[j]){

                            arr.splice(j,1);

                            j--;

                        }

                    }

                }

                return arr;

            }

             注意:不加 j-- 则会删除后,跳过一个数字

        方法一第二种写法 效率低,会增加大量无用的循环比较

        function norepeat(arr){

                var newArr = arr;

                for(var i = newArr.length;i > 0 ; i--){

                    for(var j = 0; j<i ; j++){

                        if(newArr[i] == newArr[j]){

                            newArr.splice(i,1);

                        }

                    }

                }

                return arr;

            }

        方法二 用ES5新增的indexOf()和push()方法 (非常简便好理解)

 

           function norepeat(arr){

              var newarr = [];

              for(var i in arr){

                  if(newarr.indexOf(arr[i]) == -1){

                      newarr.push(arr[i]);

                  }

              }

              return newarr;

           }

 

       方法三:利用对象的属性唯一

``var res = [];

``var obj = {};

``for``(``var i=0; i<arr.length; i++){

本文由金沙官网线上发布于Web前端,转载请注明出处:JS中数组去重的七方法

您可能还会对下面的文章感兴趣: