js-数组排序及去重

来源:互联网 发布:海关10月进出口数据 编辑:程序博客网 时间:2024/04/30 10:43

冒泡排序:

      每次从数组中拿出两位来进行排序,大的放在后边,小的放在前边。当然也可以小的在后面,大的在前面。以下以从小到大排序作为例子。

var arr=[2,6,4,5,1]function bubbleSort(arr){    for(var i = 0; i < arr.length - 1; i++){        var isSort = true;//判断是否需要进行排序        for(var j = 0; j < arr.length - 1; j++){            var a = arr[j];            var b = arr[j + 1];            if(a > b){                isSort = false;                arr[j] = b;                arr[j+1] = a;            }        }        if(isSort){            return arr;        }    }    return arr;}

快速排序

      冒泡排序有个缺点就是至少比较arr.length-1次,比较繁琐。快速排序法比冒泡排序比较的次数要更少点。思路如下所示:
快速排序

var arr = [5,12,2,7,6,10,11];function quickSort(arr){//如果数组已经全部分隔为1位数组,说明已经排序完成,可以返回数组    if(arr.length <= 1){        return arr;    }    //将中心值取出,作为分组的依据    var nub = arr.splice(Math.floor(arr.length/2),1);    var left = [];    var right = [];    for(var i = 0; i < arr.length; i++){        if(arr[i] > nub[0]){            right.push(arr[i]);        } else {            left.push(arr[i]);        }    }    //排序完成后将数组进行拼接    return quickSort(left).concat(nub,quickSort(right));}

数组去重

      方法一:

var arr = [12,0,12,7,0,12,0,11,12];var arr2 = [];for(var i = 0; i < arr.length; i++){    var isHas = false;//默认新数组中没有包含 arr[i]这一位    for(var j = 0; j < arr2.length; j++){        if(arr2[j] == arr[i]){            isHas = true;        }    }    if(!isHas){        arr2.push(arr[i]);    }}   

      方法二(fliter方法):

var arr = [12,0,12,7,0,12,0,11,12];var arr2 = arr.filter(function(data,index){    for(var i = index ; i < arr.length; i++){        if(arr[i] == data){            return false;//去除该位        }    }    return true;//保留该位});

      方法三:

var arr = [12,0,12,7,0,12,0,11,12];var obj = {};var arrNew=[];for(var i = 0; i < arr.length; i++){//利用对象的属性名唯一,相同的会前后覆盖    obj[arr[i]] = true;}for(var s in obj){    //将对象里的属性名提取出来,完成去重    arrNew.push(s);}console.log(arrNew);

      方法四

var arr = [12,0,12,7,0,12,0,11,12];for(var i = 0; i < arr.length; i++){    if(arr.indexOf(arr[i],i+1) >= 0){        arr.splice(i,1);//将相同的数值去除        i--;//保证每次循环都是从0开始    }}console.log(arr);
原创粉丝点击