• 数组去重 数组排序的方法 js实现


    let ary = [12,23,12,15,25,15,25,23,16];
    数组去重    1.es6的SET
    let arr = Array.from(new Set(ary));
    console.log(arr);
    
    2.拿出当前项和后面的内容进行比较
    
    for(let i = 0;i<ary.length-1 ; i++) {
        let item = ary[i],
            args = ary.slice(i+1);
            if(args.indexOf(item)>-1) {
                //包含:我们可以把当前项干掉
                //splice 删除
                // 1.原来数组改变,这样如果i继续++,则会产生数组塌陷
                // 2.性能不好,当前项一旦删除,后面项索引都要变
                ary.splice(i,1);
                i--;
            }
    }
    console.log(ary);
    
    3.
    let arr = [];
    for(let i = 0;i<ary.length ; i++) {
        let item = ary[i],
            args = ary.slice(i+1);
            if(args.indexOf(item)>-1) {
                //包含:我们可以把当前项干掉
                //splice 删除
                // 1.原来数组改变,这样如果i继续++,则会产生数组塌陷
                // 2.性能不好,当前项一旦删除,后面项索引都要变
            }else{
                arr.push(item);
            }
    }
    console.log(arr);
    
    
    键值对   4.拿数组中的每项向新容器中存储,如果已经存储过了,把当前项干掉
    let obj = {};
    for(let i=0;i<ary.length;i++){
       let item = ary[i];
       if(typeof obj[item] !== 'undefined') {
          ary[i] = ary[ary.length-1];
          ary.length-1;
          i--;
          continue;
       }
       obj[item] = item;
    }
    obj = null;
    console.log(ary);
    
    
    先排序  5.相邻项的处理方案  正则
    ary.sort((a,b)=>a-b);
    ary = ary.join('@') + '@';
    let reg = /(d+@)1*/g,
        arr = [];
        ary.replace(reg,(val,group1)=>{
            // arr.push(parseFloat(group1));
            arr.push(Number(group1.slice(0,group1.length-1)));
        })
        console.log(arr);
    
    
    数组排序  冒泡排序  
    function bubble(ary) {
        let temp = null;
        //外层循环控制比较的轮数
        for(let i = 0;i<ary.length-1;i++) {
            //里层循环控制每一轮比较的次数j
            for(let j=0;j<ary.length-1-i;j++) {
               if(ary[j] > ary[j+1]){
                  //当前项大于后一项
                  temp = ary[j];
                  ary[j] = ary[j+1];
                  ary[j+1] = temp;
               }
            }
        }
        return ary;
    }
    let ary = [12,8,24,16,1];
    ary = bubble(ary);
    console.log(ary);
    
    排序  插入排序
    function insert(ary) {
        //1.准备一个新数组,用来存储抓到手里的牌,开始先抓一张牌进来
        let handle = [];
        handle.push(ary[0]);
    
        //2.从第二项开始依次抓牌,一直到把台面上的牌抓光
        for(let i=1;i<ary.length;i++) {
             //A是新抓的牌
             let A = ary[i];
             //和手里的牌依次比较(从后往前比)
             for(let j = handle.length-1;j>=0;j--) {
               //每次要比较的手里的牌
               let B = handle[j];
               //如果当前排A比要比较的牌B大了。。把A放到B的后面
               if(A>B) {
                  handle.splice(j+1,0,A);
                  break;
               }
               //已经比到第一项,我们把新牌放到手中最前面计可
               if(j===0){
                  handle.unshift(A);
               }
             } 
        }
        return handle;
    }
    let ary = [12,8,24,16,1];
    ary = insert(ary);
    console.log(ary);
    
    
    //排序 快速排序
    function quick(ary) {
        //结束递归
        if(ary.length<=1) {
            return ary;
        }
        //找到数组的中间项,在原有的数组中把他移除
        let middleIndex = Math.floor(ary.length/2);
        let middleValue = ary.splice(middleIndex,1)[0];
        //准备左右两个数组,循环剩下数组中的每一项,比当前项小的放到左边数组中,反之放到右边数组
        let aryLeft = [];
        let aryRight = [];
        for(let i = 0;i<ary.length;i++) {
            let item = ary[i];
            item < middleValue ? aryLeft.push(item) : aryRight.push(item);
        }
        //最后让左边+中间+右边拼接成为最后的结果
        return quick(aryLeft).concat(middleValue,quick(aryRight));
    }
    let ary = [12,8,24,16,1];
    ary = quick(ary);
    console.log(ary);
    
    
  • 相关阅读:
    前端一站式学习地址
    springboot注解开发
    java中的四种内部类使用(1)
    java内存回收机制
    TweenMax详解
    flash渲染机制
    通过字符串名访问变量
    总结调用Flash的几种方法
    flex buider2 的注册
    转:FlexChn.Cn Adobe Flex最佳学习路线
  • 原文地址:https://www.cnblogs.com/isuansuan/p/12837552.html
Copyright © 2020-2023  润新知