美文网首页
20170711笔记

20170711笔记

作者: 潜水_12eb | 来源:发表于2017-07-11 23:40 被阅读0次

    数组方法总结

    • 从数组末尾删除一项
      • ary.length--;
      • ary.length-=1
      • ary.length=ary.length-1
      • ary.pop()
      • ary.splice(ary.length-1,1)
    • 给数组末尾增加一项
      • ary[ary.length]=xxx
      • ary.push()
      • ary.splice(ary.length,0,'xxx')
    • 数组的克隆方法
      • slice()
      • slice(0)
      • ary.concat()
      • ary.splice(0) 返回值是克隆

    选项卡封装

    • 功能
      • 可以让一个页面中多个容器都有选项卡的功能
      • 通过第二个参数 设置默认点亮项
    • 参数可有可无 是用||的思想 ‘’或‘’
      var selectIndex=selectIndex%aBtn.length||0;
    • %的思想
      var selectIndex=selectIndex%aBtn.length||0;
    • 一个选项卡代码(自定义)
     var oWrap=document.getElementsByTagName('div')[0];
        var aBtn=oWrap.getElementsByTagName('li');
        var aDiv=oWrap.getElementsByTagName('div');
        for(var i=0;i<aBtn.length;i++){
            aBtn[i].index=i;
            aBtn[i].onclick=function(){
                for(var i=0;i<aBtn.length;i++){
                    aBtn[i].className='';
                    aDiv[i].className='';
                }
                aBtn[this.index].className='on';
                aDiv[this.index].className='show';
    
            }
        }
    
    • 闭包写选项卡代码
    for(var i=0;i<aBtn.length;i++){
            (function(index){
                aBtn[i].onclick=function(){
                    for(var i=0;i<aBtn.length;i++){
                        aBtn[i].className='';
                        aDiv[i].className='';
                    }
                    aBtn[index].className='on';
                    aDiv[index].className='show';
                }
    
            })
            (i)
        }
    

    封装选项卡

    function tab(id,selectIndex){
            var oWrap=document.getElementById(id);
            var aBtn=oWrap.getElementsByTagName('li');
            var aDiv=oWrap.getElementsByTagName('div');
            oWrap.style.width=aBtn.length*200+'px';
            selectIndex=selectIndex%aBtn.length||0;
            function on(seIndex){
                for(var i=0;i<aBtn.length;i++){
                    aBtn[i].className='';
                    aDiv[i].className='';
                }
                aBtn[seIndex].className='on';
                aDiv[seIndex].className='show';
            }
            on(selectIndex);
            /*for(var i=0;i<aBtn.length;i++){
             aBtn[i].index=i;
             aBtn[i].onclick=function(){
             for(var i=0;i<aBtn.length;i++){
             aBtn[i].className='';
             aDiv[i].className='';
             }
             aBtn[this.index].className='on';
             aDiv[this.index].className='show';
    
             }
             }*/
            for(var i=0;i<aBtn.length;i++){
                (function(index){
                    aBtn[index].onclick=function(){
                       on(index)
                    }
    
                })
                (i)
            }
        }
        tab('tab1');
        tab('tab2',2)
    

    数组去重的方法

    1、双重循环

    for(var i=0;i<ary.length;i++){
      var cur=ary[i]
        for(var j=i+1;j<ary.length;j++){
               if(cur==ary[j]{
             ary.splice(j,1);
             j--;
              }
          }
    }
    

    2、先用sort,然后用当前项跟相邻项进行比较

    ary.sort(function (a,b){
    return a-b;
    });
    for(var i=0;i<ary.length;i++){
    if(ary[i]===ary[i+1]){
    ary.splice(i,1);
    i--;
         }
    }
    

    3、 新数组

    var  newAry=[];
    for(var i=0;i<ary.length;i++){
    if(newAry.indexOf(ary[i]==-1){
    newAry.push(ary[i]);
      }
    }
    

    4、 利用不重名的特性

    var obj={};
        //遍历数组中的每一项,如果对象中没有,把这一项赋值一份给对象,如果对像中已经有了,说明这是重复项,我们就删除数组中的这一项;
        for(var i=0; i<ary.length; i++){
            if(obj[ary[i]]){//走if说明重复了;
                ary.splice(i,1);
                i--;
            }else{//走else说明对象中没有这个数;那么就给obj添加属性
                obj[ary[i]]=ary[i];
            }
        }*/
    

    5、 利用对象不重名的特性,实现了重复次数的记录,里面用到两个循环,一个for循环,for..in循环

    var obj={};
        for(var i=0; i<ary.length; i++){
            if(obj[ary[i]]){
                obj[ary[i]]++; //++ +=1
            }else{//走else一定是对象没有;给这个属性名贴个1的标签
                obj[ary[i]]=1;
            }
        }
        //通过for..in拿到每个属性名;
        var newAry=[];
        for(var attr in obj){
            newAry.push(Number(attr));
        }
    

    对象跟别人不同的特性

    1、不重名的特性
    2、如果对象的属性名是数字,那么打印出来的时候,按照数组的先后顺序进行显示

    算法

    快排

    • 1:先拿到中间的索引,通过中间索引找到他对应的项
      • 这个中间项,是从数组中拎出来,即数组中没有他了,所以,只能用splice;
      • splice的返回值,是被删除的内容以新数组的形式返回,因为我们删除了一项,所以,要去数字必须用[0];
    • 2:创建两个新数组left,right;
    • 3:用ary数组跟中间项比较,比他小的放left数组,比他大的放right数组
    • 4: return quciksort(left).concat([center],quciksort(right));
      • 函数自己调用自己,属于"递归"
    • 5:停止拆分的条件 if(ary.length<=1){return ary;}
      • return 1)有阻断程序执行的功能 2)返回值;

    Math常用的方法

    • Math.ceil() 向上取整
    • Math.floor() 向下取整
    • Math.random() 取0~1之间的随机小数,不包含1;
      • Math.round(Math.random()*(m-n)+n); 取n~m之间的随机整数,包含m
    • Math.round() 四舍五入
    • Math.pow(2,3) 幂次方
    • Math.sqrt() 开平发
    • Math.abs() 取绝对值

    插排

    1、先从ary种取出来一个数字,单独是个数组 splice
    2、遍历ary的数组,跟left数组,从后往前的比较,如果比left的数字小,继续往前比,如果比某个值大,就插入到这个值的下一项的前面;(必须break,否则就会出错) ;如果比所有的都小,那就插入到left数组的第一个;

    冒排-冒泡排序

    1、两重循环,第一重循环代表的是轮数,第二重循环代表的次数,比较的次数在一次次的减少;
    2、 每次比较的时候,都拿当前项跟后一项进行比较,如果比他大,交换位置;

    var tmp=ary[j];
    ary[j]=ary[j+1];
    ary[j+1]=tmp;
    

    跟函数相关的

    • 阻断函数的执行 return;

    跟循环相关的

    • break 阻断循环的执行
    • continue 本次不执行,以后继续;

    相关文章

      网友评论

          本文标题:20170711笔记

          本文链接:https://www.haomeiwen.com/subject/eegmhxtx.html