某公司的線上筆試題

 

1)編寫正則表達式,匹配密碼,要求密碼必須以字母開頭,必須有數字,字母,或   _  -  .  的組合 ,長度5-15位  html

var reg = /^[a-zA-Z](?![a-zA-Z]+$)(?![0-9]+$)(?![-_.]+$)[a-zA-A\d-._]{4,16}$/g;

 

  ^   從頭開始正則表達式

  [a-zA-Z]        匹配的第一位是字母數組

  (?![a-zA-Z]+$)    向後預查到結尾 不匹配全是字母的狀況app

  (?![0-9]+$)       向後預查不匹配全是數字的狀況dom

  (?![-_.]+$)      向後預查不匹配全是 - _  .的狀況  this

  [a-zA-Z\d.-_]{4,16}  由於前面第一位 的   []  消耗字符串, 因此剩餘要匹配的長度減一  spa

  $          結尾      prototype

這裏主要運用到了   正則表達式的預查  code

        更多關於  正則表達式 --->個人博客htm

  

2)用源生js 編寫一個鏈式調用  new Box(100,100,red).addTo(body).addTo(body).delay(3000).remove();  實現 用過如上代碼 向body 添加兩個 100*100的紅色的盒子,延時3S後移出

  小生不才  只是實現了效果,可是,應該有一部分不是這道題想要的

    function Box (wid,hei,col) {
      this.wid = wid || 0;
      this.hei = hei || 0;
      this.col = col || 'black';
      this.queue = [];    //隊列儲存生成的dom
    }
    Box.prototype.addTo = function(foo){    //這裏也要注意,根據題,能在body插入多個Dom,因此,要生成的時候也要生成多個dom,
      this.foo = foo;                //因此   createElement要在這一步,  若是在上一步的話  new Box()只調用一次
      var box = document.createElement('div');  //這一步 插入多少次  只有一個dom(我線上筆試的時候就寫錯了)
      box.style.width = this.wid + 'px';
      box.style.height = this.hei + 'px';
      box.style.backgroundColor = this.col;
      document[foo].appendChild(box);
      this.queue.push(box);
      return this;
    }
    Box.prototype.delay = function(tim){ 
      return this;                  
    }                     
                          Box.prototype.remove
= function(){ var self = this; setTimeout(() => { self.queue.forEach(ele => { document[this.foo].removeChild(ele); }); }, this.tim); return this; }

 

 

//這個delay不會,去網上找的   , 
使用 循環佔用cpu,可是他會在daaTo的dom顯示出來以前就進入循環狀態
,阻塞了前面dom生成的效果this.tim = tim;            
//循環佔用cpu  還不能使用setTimeout ,
改變循環的判斷值 ,
就像是 while(flag){} 開始flag是true,
計時器結束了 flag = false 
//然而這樣是不行的,  改變了的 flag傳不進去,  
若是把 計時器放在循環裏頭  那就是瘋了。。。。
//網上的 作法是   
用 在循環裏用  new Date().getTime() 和  
在循環外面 第一次執行就獲取的 new Date().getTime()+timer 進行比較
//來當作定時器  (timer是指   定時器傳進來的  毫秒數)

 

3)已知對象 obj = {'asfsd':'3123,'dsf':'2131,'gads':'3213','sdaf':2526}  實現將對象的key 按照ascii的順序排序(這道題應該考的是數組克隆)

    var obj = {'abc':123,'cde':345,'bac':213,'def':456}
    function clone(src,tar){       //最簡單的一個克隆  不對原對象進行改變
      for(var prop in src) {
          tar[prop] = src[prop];    
      }
    }
    var tar = {};
    clone(obj,tar);    
    var arrKey = [];
    for(var i in tar){          //便利出key的數組
      arrKey.push(i)
    }
    var arrOrder = arrKey.sort()    
    console.log(arrOrder);
相關文章
相關標籤/搜索