首页 > 代码库 > 7、数组去重和排序

7、数组去重和排序

一、数组去重

    /**
     * 数组去重
     * 1、双循环法-判断有无相等项
     * 注意:第二个循环要从 i+1 开始
     * */
    let circleRepeat = function (ary) {
        for(let i=0;i<ary.length;i++){
            let cur = ary[i];
            for(let j=i+1;j<ary.length;j++){
                if(cur === ary[j]){
                    ary.splice(j,1);
                    j--;
                }
            }
        }
        return ary
    };
//    console.log(circleRepeat([1,2,3,4,1,1,2,2,3,4,4]));
    /**
     * 数组去重
     * 2、新数组法-新数组没有当前项-放入新数组
     * 注意:indexOf 用法
     * */
    let newArrRepeat = function (ary) {
        let ary2 = [];
        for(let i=0;i<ary.length;i++){
            let cur = ary[i];
            if(ary2.indexOf(cur) === -1){
                ary2.push(cur);
            }
        }
        return ary2
    };
//    console.log(newArrRepeat([1,2,3,4,1,1,2,2,3,4,4]));
    /**
     * 数组去重
     * 3、sort排序法-排序后判断相邻两项是否相等
     * 注意:sort用法和防止数组塌陷
     * */
    let sortRepeat = function (ary) {
        ary.sort(function (a,b) {
            return a-b;
        });
        for(let i=0;i<ary.length;i++){
            if(ary[i] === ary[i+1]){
                ary.splice(i,1);
                i--;//预防数组塌陷
            }
        }
        return ary;
    };
//    console.log(sortRepeat([1,2,3,4,1,1,2,2,3,4,4]));
    /**
     * 数组去重
     * 4、对象法-看对象中是否有重复的,如果有,删除数组该项
     * 注意:对象的属性名与属性值
     * */
    let objRepeat = function (ary) {
        let obj={};
        for(let i=0; i<ary.length; i++){
            let cur=ary[i];
            if(obj[cur]==cur){
                ary.splice(i,1);
                i--;
            }
            obj[cur]=cur;
        }
        return ary;
    };
//    console.log(objRepeat([1,2,3,4,1,1,2,2,3,4,4]));
    /**
     * 数组去重
     * 5、对象不重名特性-利用对象不重名的特性 不仅可以去重-属性名;而且属性值还记录了当前元素出现的次数
     * 注意:对象的属性名与属性值
     * */
    let objNameRepeat = function (ary) {
        let obj={},ary2=[];
        for(let i=0; i<ary.length; i++){
            let cur=ary[i];
            /*if(obj[cur]){
             obj[cur]++;
             continue;
             }
             obj[cur]=1; //给对象添加数组中的该项内容,并赋值为1;*/
            if(obj[cur]){
                obj[cur]++;
            }else{
                obj[cur]=1;
            }
        }

        return obj;
    };
//    console.log(objNameRepeat([1,2,3,4,1,1,2,2,3,4,4]));

二、数组排序

    /**
     * 快速排序
     * 1、找中间位置及对应的值
     * 2、数组中的每一项与中间值比较 left[]  right[]
     * 3、递归+数组拼接
     * */
    let quickSort = function (ary) {
        if(ary.length<=1){
            return ary
        }
        let num = Math.floor(ary.length/2);
        let numValue = ary.splice(num,1)[0];
        let left = [],right = [];
        for(let i=0;i<ary.length;i++){
            let cur = ary[i];
            if(cur<numValue){
                left.push(cur)
            }else {
                right.push(cur)
            }
        }
        return quickSort(left).concat([numValue],quickSort(right))
    };
//    console.log(quickSort([2,43,7,89,0,6,4,2,5,6]))

    /**
     * 插入排序
     * 1、取数组第一项对应的值作比较。
     * 2、循环原数组与left数组
     * 3、原数组当前项小于left中每一项,放到left最前面。
     * 4、原数组当前项大于left中其中某一项,放到此项后面。
     * 5、返回left
     * */
    let insertSort = function (ary) {
        let left = ary.splice(0,1);
        for(let i=0;i<ary.length;i++){
            let cur = ary[i];
            for(let j=left.length-1;j>=0;){
                if(cur<left[j]){
                    j--;
                    if(j == -1){
                        left.unshift(cur);
                    }
                }else {
                    left.splice(j+1,0,cur);
                    break;
                }
            }
        }
        return left
    };
//    console.log(insertSort([2,43,7,89,0,6,4,2,5,6]))
    /**
     * 冒泡排序
     * 1、第一个循环--> 数组的长度=比较的轮数 ary.length
     * 2、第二个循环--> 每轮比较的次数 ary.length-1-i(最后一项不用比较)
     * 3、每次比较把较大值放到后面-->每轮比较最大值放到了最后
     * 4、返回数组
     * */
    let bubbleSort = function (ary) {
        for(let i=0;i<ary.length;i++){
            for(let j=0;j<ary.length-1-i;j++){
                if(ary[j]>ary[j+1]){
                    let tmp = ary[j+1];
                    ary[j+1] = ary[j];
                    ary[j] = tmp;
                }
            }
        }
        return ary
    };
//    console.log(bubbleSort([2,43,7,89,0,6,4,2,5,6]));

 

7、数组去重和排序