js实现数组去重的三个方法、数组的快速排序

一:数组去重方法1 
(思路:新建一个空的result数组,将需要去重的数组中的第一个元素传入,依次与剩余的元素进行对比,不重复则把元素传入到result数组中。)

            Array.prototype.removeDup = function(){
                var result = [this[0]];
                for(var i = 1 ; i<this.length; i++){
                    var repeat = false;

                    for(var j = 0; j<result.length;j++){
                        if(this[i] === result[j]){
                            repeat = true;
                            break;
                        }
                    }
                    if(!repeat){
                        result.push(this[i]);
                    }
                }

                return result;
            }

            var arr = [1,3,1,4,6,6,88];
            console.log(arr.removeDup());

二 : 数组去重方法2 
(思路:将数组排序,新建一个空的result数组,将要去重的数组的第一个元素存入,遍历数组,将数组中的各个元素依次与result元素中的最后一个元素进行对比,如果二者不相等则存入result数组中。这种方法主要依据排序后相同的元素是相邻的。) 
第二个方法虽然比第一种方法高效,但是因为原数组是是排序的,所在输出的result数组也是排序过后的,如果想要的结果是没有变动原数组元素的位置,这个方法就不可取了。

            Array.prototype.removeDup2 = function(){
                this.sort();
                var result = [this[0]];

                for(var i = 1; i<this.length; i++){
                    if(this[i] !== result[result.length - 1]){
                        result.push(this[i]);
                    }
                }

                return result;
            }

            var arr = [1,3,1,4,6,6,88];
            console.log(arr.removeDup2());

三 : 数组去重方法3(推荐使用)* 
(思路:新建一个空的result数组,一个空的对象。遍历需要去重的数组,判断对象中是否存在当前遍历的元素作为属性名,没有的话则将该元素存入result数组中,同时为obj对象添加上该属性名。)

            Array.prototype.removeDup3 = function(){
                var result = [];
                var obj = {};
                for(var i = 0; i < this.length; i++){
                    if(!obj[this[i]]){
                        result.push(this[i]);
                        obj[this[i]] = 1;
                    }
                }

                return result;
            }

            var arr = [1,2,2,5,2,"测试","test","测试","test"];
            console.log(arr.removeDup3());

数组的快速排序 
(思路:判断当传入的数组长度大于1的情况下,获取中间值,新建两个空数组,分别用来存放大于中间值和小于中间值的元素,递归调用,最后返回结果。)

            var quickSort = function(arr) {
              if (arr.length <= 1) { return arr; }
              var pivotIndex = Math.floor(arr.length / 2);
              var pivot = arr.splice(pivotIndex, 1)[0];
              var left = [];
              var right = [];
              for (var i = 0; i < arr.length; i++){
                if (arr[i] < pivot) {
                  left.push(arr[i]);
                } else {
                  right.push(arr[i]);
                }
              }
              return quickSort(left).concat([pivot], quickSort(right));
            };

            var arr1 = [1,4,65,21,2,222,111];
            console.log(quickSort(arr1));

额外补充:

递归实现数组去重

            function removeDup(arr,start,end){
                if(start === end){
                    return [arr[start]];
                }else if(start == end-1){ //数组中有两个值
                    if(arr[start] === arr[end]){
                        return [arr[start]];
                    }else{
                        return [arr[start],arr[end]];
                    }
                }

                var ban = Math.floor((end+start)/2);
                var arrLeft = removeDup(arr,start,ban);
                var arrRight = removeDup(arr,ban+1,end);

                var result = arrLeft; //将左边的数组放进去
                for(var i = 0; i < arrRight.length; i++){
                    if(result.indexOf(arrRight[i]) === -1){
                        result.push(arrRight[i]);
                    }
                }
                return result;
            }

            console.log(removeDup(arr1,0,arr1.length-1));
时间: 2024-12-29 23:42:39

js实现数组去重的三个方法、数组的快速排序的相关文章

js数组去重的三个方法

在工作上,对json数据处理时,例如遇到对某些产品的尺码进行排序,不同的产品都有相同的尺码那是正常不过的事情,如果我们要把这些转成表格的形式来展现,那么这些尺码就不要不能重复才行.在这里呢,我就写几个数组去重的方法,给大家参考参考: 方法一:对数组进行先排序,排完序之后在让元素与前一个元素做对比,相同的就去掉 说明:该方法用到的是sort()方法和slice(),下面我直接贴代码上来,里面有注释说明,相信大家肯定是看得懂的 var arr = ['a', 'b', 'c', 'd', 'e',

JS数组去重的三种方法

<!DOCTYPE html> <html>     <head>         <meta charset="UTF-8">         <title>数组去重</title>     </head>     <body>         <script type="text/javascript">             //注意有一个元素是空的

js 数组去重的三种方法(unique)

方法一: Array.prototype.unique=function(){ var arr=[];//新建一个临时数组 for(var i=0;i<this.length;i++){//遍历当前数组 if(arr.indexOf(this[i])==-1){//当前数组的第i个值在新数组中找不到,则添加到新数组中去 arr.push(this[i]); } } return arr; }; 方法二: Array.prototype.unique=function(){ var arr=[];

数组去重的三种方法

arr = [1,1,2,3,2,1,2,3,4,5,1,2,3,4,5]; 方法一: 1.先将数组排序 —> arr.sort(); 2.循环数组,从第0项开始比较当前项与下一项的大小,如果两者相等,则删除数组中的当前项 —> arr.splice(开始位置,删除个数); 3.删除之后还要从删除的当前项[i]开始进行比较 —> i--; var arr = [1,1,2,43,3,2,1,2,3,4,5,1,2,3,4,5];    arr.sort();    for(var i =

js中数组去重的几种方法

js中数组去重的几种方法         1.遍历数组,一一比较,比较到相同的就删除后面的                 function unique(arr){                         for(var i=0;i<arr.length;i++){                                 for(var j=i+1;j<arr.length;j++){                                         if(ar

(转)在网页中JS函数自动执行常用三种方法

原文:http://blog.sina.com.cn/s/blog_6f6b4c3c0100nxx8.html 在网页中JS函数自动执行常用三种方法 在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT   LANGUAGE="JavaScript">   functionn MyAutoRun() {   //以下是您的函数的代码,请自行修改先! alert("函数自动执行哦!");   } </SCR

在网页中JS函数自动执行常用三种方法

在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT   LANGUAGE="JavaScript">   functionn MyAutoRun() {   //以下是您的函数的代码,请自行修改先! alert("函数自动执行哦!");   }  </SCRIPT> 下面,我们就针对上面的函数,让其在网页载入的时候自动运行! ①第一种方法 将如上代码改为: <SCRIPT   LANGUAG

js获取当前时间戳的三个方法

var time1 = Date.parse(new Date()); var time2 = new Date().valueOf(); var time3 = new Date().getTime(); 其中需要注意的是: 第一种方法: Date.parse(new Date()) 获取的时间戳是把毫秒改成000显示,例:1512122108000 第二种方法: new Date().valueOf() 和第三种方法: new Date().getTime() 是获取了当前毫秒的时间戳,例:

Javascript数组去重的几种方法

Javascript数组去重的几种方法 新建空数组,通过for...of(ES6)循环遍历,通过indexOf判断元素是否在新数组中存在,将不存在的(indexOf(n)==-1)元素push到新数组中: let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2]; function removeDup_indexOf(originalArr){ let newArr = []; for(n of originalArr){ if(newArr.in