js 面试题之---数组、字符串操作

1.  计算字符串中某个字符的个数

      var aaa='1231011211009181';

      function count(str){

           var arr=[];

           for(var i=0;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

               for(var j=i+1;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

 

               //小于基准的方左边、大于右边

            if(arr[i]

                   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

         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

           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

       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

        if(newarr[i] == item){

            newarr.splice(i,1);

            i--;//删除一个元素后,后面的元素会提前一位

        }

    }

    return newarr;

}

 

19.改变原始数组

 function remove3(arr,item){  

    for(vari=0;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

                        if(arr[i]==item){

                               count++;

                       }

                 }

                 return count;

       }

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

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

你可能感兴趣的:(js)