1. 程式人生 > >js 面試題之---陣列、字串操作

js 面試題之---陣列、字串操作

1.  計算字串中某個字元的個數

      var aaa='1231011211009181';

      function count(str){

           var arr=[];

           for(var i=0;i<str.length;i++){

                     if(str.charAt(i)=='1'){

                       arr.push(str.charAt(i));

                     }

               }

               return arr.length;

         }

     console.log(count(aaa));

2.陣列去重

        var arr=[1,1,1,2,2,1,3,1,3,4,5,6];

        function arrDel(arr){

          var result=[],

                 obj={};

              for(var i in arr){

               if(!obj[arr[i]]){ //判斷物件的屬性

                   result.push(arr[i]);

                      obj[arr[i]]=1;

               }

              }

              return result;

        }

        console.log(arrDel(arr));

3. 陣列氣泡排序

     function bubbleSort(arr){

          for(var i=0;i<arr.length-1;i++){

               for(var j=i+1;j<arr.length;j++){

                   //獲取前一個值和後一個值進行比較

                      if(arr[i]>arr[j]){

                            //建立中間變數 交換值

                         var cur=arr[j];

                            arr[j]=arr[i];

                            arr[i]=cur;

                      }

               }

              }

              return arr;

        }

4.陣列快速排序

        function quickSort(arr){

         if(arr.length<=1){return arr};

         //選基準值,可以是任意位置

       var key=Math.floor(arr.length/2);

         var keyValue=arr.splice(key,1)[0];

         //定義兩個陣列

         var left=[];

         var right=[];

         for(var i=0;i<arr.length;i++){

               //小於基準的方左邊、大於右邊

            if(arr[i]<keyValue){

                   left.push(arr[i]);

               }else{

                   right.push(arr[i]);

               }

         }

         //遞迴

         return quickSort(left).concat([keyValue],quickSort(right));

         //return typeof keyValue;

        }

        var array=[5,1,6,4,10,11,15,0,2];

        console.log(quickSort(array));

        //console.log(bubbleSort(array));

5.json 物件陣列排序

        var data = [{

                name: "海外事業部",

                value: 0.58

            }, {

                name: "內銷",

                value: 0.36

            }, {

                name: "網際網路中心",

                value: 0.78

            }]; 

        function compare(a,b){

          return b.value-a.value;

        }

        data.sort(compare);

        console.log(data);

6.刪除陣列的第一個元素,不直接改變陣列

       var a=[2,1,3,4,5,8];

       function delFirst(arr){

         var arr2=arr.slice(0);

         arr2.shift();

         return arr2;

       }

       console.log(delFirst(a));

7.判斷一個字串中出現次數最多的字元,統計這個次數

   var str='addddfffssdfsadfsdfsafjsd';

       var json={}; //定義物件來存放 物件屬性的值

       //遍歷字串,將重複出現的字元 累加

       for(var i=0;i<str.length;i++){

         if(!json[str.charAt(i)]){

                json[str.charAt(i)]=1;

         }else{

             json[str.charAt(i)]++;

         }

       }

       var iMax=0;

       var icur='';

       console.log(json);//{a:3,d:8,f:7,s:6,j:1}

       //遍歷 json物件取最大值

       for(var val in json){

         if(json[val]>iMax){

            iMax=json[val];

               icur=val;

         }

       }

       console.log('出現最多的字元:'+icur,'出現次數:'+iMax);

8.求一個字串的位元組長度(中文字元佔兩個位元組)

       var str='czj陳志傑';

   function getStrLen(str){

        var json={len:0};

        var pattern=/[\u4e00-\u9fa5]/;//unicode編碼符合中文字元

        for(var i=0;i<str.length;i++){

           if(pattern.test(str.charAt(i))){

                 json['len']++;

               }

         }

        return json['len']+str.length;

       }

       console.log(getStrLen(str));

9.javascript面向物件中繼承實現

子建構函式中執行父建構函式,並用call\apply改變this
克隆父建構函式原型上的方法

        functionPerson(name){

         this.name=name;

        }

        Person.prototype.showName=function(){

         console.log(this.name);

        }

        Person.prototype.showJob=function(){

         console.log(this.job);

        }

        function Student(name,job){

          Person.apply(this,arguments);//改變this上下文環境

              this.job=job;

        }

        for(var i in Person.prototype){

          Student.prototype=Person.prototype;

        }

        newStudent('chenzhijie','student').showName();

     newStudent('chenzhijie','student').showJob();

10.函式的鏈式呼叫 類似:add(1)(2)

       function add(a){

         var sum=a;

         var tmp=function(y){

           sum=sum+y;

               return tmp;//為了完成鏈式呼叫

         }

         //以字串的形式返回物件的原始值

         tmp.toString=function(){

            return sum;

         };

       return tmp;

        }

        console.log(add(1)(2)(3));//6

11. this的典型應用

  事件: onclick  this->觸發事件的物件

  建構函式:  this->new 出來的object

  call/apply : 改變this

12. 降低頁面載入時間的方法

    1. 壓縮css 、js檔案

    2. 合併js、css檔案 ,減少http請求

    3. 外部js、css檔案放在最底下

4.減少dom操作,儘可能用變數替代不必要的dom操作

13. Ajax工作原理

1.建立ajax物件

        if(window.XMLHttpRequest){

            // code for IE7+, Firefox, Chrome, Opera,Safari

             xmlhttp=new XMLHttpRequest();

         }else{

           // code for IE6, IE5

           xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

        }

  2. 判斷請求方式(get/post)

  3. 開啟連線 xmlhttp.open()

  4. 傳送 xmlhttp.send(null/data)

  5. 當ajax物件完成第四步(onreadystatechange)資料接收完成,判斷(xmlhttp.readyState==4)和http響應狀態(status)200-300之間或者304(快取)執行回撥函式,返回資料xmlhttp.responseText

13. 陣列排序,如[[1,2],[2,1],[1,3]]->[[1,2],[1,3],[2,1]]

        vararr1=[[2,4],[1,2],[2,1],[1,3]];

        function comparetwo(a,b){

           if(a[0]!=b[0]){

                   return a[0]-b[0];

               }else{

                   return a[1]-b[1];

               }

         }

         var result=arr1.sort(comparetwo);

         console.log(result);

14.HTTP與HTTPS的區別

   HTTP:是網際網路上應用最為廣泛的一種網路協議,是一個客戶端和伺服器端請求和應答的標準(TCP),用於從WWW伺服器傳輸超文字到本地瀏覽器的傳輸協議,它可以使瀏覽器更加高效,使網路傳輸減少。

HTTPS:是以安全為目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。

HTTPS和HTTP的區別主要如下:

  1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。

  2、http是超文字傳輸協議,資訊是明文傳輸,https則是具有安全性的ssl加密傳輸協議。

  3、http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。

  4、http的連線很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。

15.查詢陣列中某元素的位置

 function indexOf(arr,item){

    for( vari=0;i<arr.length;i++){

       if(arr[i]==item){returni;}

    }

     return -1;

}

var arr1=[1,2,3,4];

var result=indexOf(arr1,2);

console.log(result);

16.陣列求和

function sum(arr) {

  var sum=0;

  arr.forEach(function(value){

      sum+=value;

  });

  return sum;

}

var arr=[1,2,3,4];

console.log(sum(arr));

17.移除陣列中的item 元素,不直接修改原先陣列

function remove(arr,item){

   var arr2=[];

   arr.forEach(function(val){

     if(val!=item){arr2.push(val);}

   });

   return arr2;

}

18.splice/從陣列中新增/刪除專案,然後返回被刪除的專案。

function remove2(arr,item){

    var newarr = arr.slice(0);

    for(vari=0;i<newarr.length;i++){

        if(newarr[i] == item){

            newarr.splice(i,1);

            i--;//刪除一個元素後,後面的元素會提前一位

        }

    }

    return newarr;

}

19.改變原始陣列

 function remove3(arr,item){  

    for(vari=0;i<arr.length;i++){

        if(arr[i] == item){

            arr.splice(i,1);

            i--;//刪除一個元素後,後面的元素會提前一位

        }

    }

    return arr;

}

var arr=[1,2,3,3,5,4,4,9];

console.log(remove2(arr,4));

20.新增元素 不直接修改原先陣列

function append(arr, item) {

    // return arr.push(item);

    return arr.concat([item]);

}

var arr=[1,2,3,5];

console.log(append(arr,4));

21.刪除陣列的最後一個元素,不直接改變陣列

 function truncate(arr) {

   var arr2=arr.slice(0);

   arr2.pop();

   return arr2;

 }

 function truncate2(arr) {

   vararr2=arr.slice(0,arr.length-1);//返回一個新陣列

   return arr2;

 }

 var arr=[1,2,3,4,5];

 console.log(truncate2(arr));//1,2,3,4

22.在陣列開頭新增元素,不直接改變陣列

 function prepend(arr, item) {

   var arr2=arr.slice(0);

   arr2.unshift(item);

   return arr2;

  }

  var arr=[1,2,3,4,5,6];

  console.log(prepend(arr,0));

23.向陣列指定位置新增元素,不直接改變陣列

  function insert(arr, item,index) {

         var arr2=arr.slice(0);

         arr2.splice(index,0,item);

         return arr2;

   }

       var arr=[1,2,3,4];

       console.log(insert(arr,5,2));

 24.統計陣列中的值等於item元素 出現的次數

          function count(arr, item) {

                 var count=0;

                 for(var i=0;i<arr.length;i++){

                        if(arr[i]==item){

                               count++;

                       }

                 }

                 return count;

       }

              var arr=[1, 2, 4, 4,3, 4, 3];

              console.log(count(arr,4));

相關推薦

js 試題---陣列字串操作

1.  計算字串中某個字元的個數       var aaa='1231011211009181';       function count(str){            var arr=[];            for(var i=0;i<str.leng

PHP試題文件目錄操作

als brush 文件名 func ram class png 後綴 extension 獲取文件後綴,遍歷目錄層次 /** * 5種方式獲取文件後綴名 * 這道題其實就是考函數substr() strrchr() array_pop() strrpos() str

js試題求數組最值

pre 面試 可能 cti clas return n) ole arr 今天繼續分享js常見的面試題,求數組最大值,最小值,這裏列舉4種常見解法,還有其他方法也可以實現,讀者知道可以私信我,我將把意見列舉到博客中,歡迎提出意見。 第一種,利用數組排序 1 var arr

java試題finalfinalize和finally的區別

finally:finally是一個關鍵字,與try和catch一起用於異常的處理,finally塊一定會執行,無論在try快中是否有發生異常。 finalize:finalize方法是在物件被回收之前呼叫的方法,給物件自己最後一個復活的機會,但是什麼時候呼叫finalize沒有保證。

試題js陣列遍歷

js中的陣列遍歷是專案中經常用到的,在這裡將幾種方法做個對比。 for迴圈:使用評率最高,也是最基本的一種遍歷方式。 let arr = ['a','b','c','d','e']; for (let i = 0, len = arr.length; i < len;

js試題-----DOM操作和BOM操作

dom 數據 prop 樹形 結構 獲取 protocol earch 部分 題目1:DOM是哪種基本的數據結構 答案:DOM是一種樹形結構的數據結構 題目2:DOM操作的常用API有哪些 答案:獲取DOM節點,以及節點的property和Attribute。獲取父節點,獲

前端常見演算法試題 - 二維陣列中的查詢[JavaScript解法]

前端常見演算法面試題之 - 二維陣列中的查詢[JavaScript解法] 題目描述 輸入輸出分析 實現思路 程式碼實現 題目描述 在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個

java試題什麼是死鎖活鎖餓死和競態條件?

    死鎖:是指兩個或兩個以上的程序(或執行緒)在執行過程中,因爭奪資源而造成的一種相互等待的現象,若無外力作用,他們將無法推進下去; 活鎖:是指兩個執行緒優先順序相同,都禮讓不走,就這樣一直僵持下去; 餓死:在單執行緒情況下,A、B兩個執行緒,A先執行;A在執行過程中

用9種辦法解決 JS 閉包經典試題 for 迴圈取 i

閉包 正確的說,應該是指一個閉包域,每當聲明瞭一個函式,它就產生了一個閉包域(可以解釋為每個函式都有自己的函式棧),每個閉包域(Function 物件)都有一個 function scope(不是屬性),function scope內預設有個名為 Globe 的全域性引用(有了這個引用,就可以直接

Javascript——進階(事件陣列操作字串操作定時器)

目錄事件屬性陣列字串操作定時器封閉函式 事件屬性 引數 描述 onclick 滑鼠點選事件 onmouseover 滑鼠移入標籤,觸發行為 onmouseout 滑鼠移出標籤,觸發行為 陣列 操作 方法 建立 arr

java字元陣列 字串整形之間的轉換。

轉自https://www.cnblogs.com/javacatalina/p/6641338.html 一、字元陣列轉字串 方法1 char[] str = {'a','b','d'}; StringBuffer sb = new StringBugger

JS 進階(9) ECMAScript6 基礎入門:變數函式解構賦值陣列字串面向物件jsonpromise

一、ES6是啥 ECMAScript 和 JavaScrip的關係 簡單的說ECMA 是一個標準,任何語言都可以去實現這個標準,但目前為止只有javascript 實現了。所以也就預設認為ECMAScript就是javascript。 ECMAScript

JS陣列字串常用方法

陣列: 1.push(): 向陣列尾部新增一個或多個元素,並返回新增新元素後的陣列長度。注意,該方法會改變原陣列。 1 var arr = [1,2,3]; 2 console.log(arr); // [1, 2, 3] 3 var b = arr.pu

試題旋轉陣列求最小數字問題(Python實現)

旋轉陣列求最小數字 問題描述: 把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入一個非遞減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。 例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該陣列的最小值為1。 NOTE

python--試題棧思想判斷字串是否有效

給定一個只包含'  [  ]  (  )  {  }  '元素的字串是否有效,滿足以下條件: 左括號必須用相同的右括號閉合 左括號必須以正確的順序閉合 示例:: ‘()’輸出True

劍指offer試題陣列排成最小的數

1,問題:輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。 2,想法:

C++試題寫一個在一個字串中尋找一個子串第一個位置的函式

#include <iostream> using namespace std; int search_str(char *strDest ,const char *strSrc, int n ) { int count = 1;

一道Java試題實現複製刪除剪下檔案(資料夾的實現)的snippet

Java面試題是叫寫出檔案複製、刪除和剪下的,所以昨天晚上就花了大概一個小時寫出這個完整的snippet(當然如果只要思路的話就好辦了)。 這個snippet中的刪除檔案(資料夾)部分有點意思,一般在Windows下目錄過長的話,目錄就刪除不了。而這個程式可以解決這個因

js(2) javascript中物件陣列字串合併的方法

一、js中物件合併的方法1)第一種方法var a = { a : '1', b : '2' } var content = { c: '3', ...a } console.log(content) //content = {c: "3", a: "1", b: "