原生js面试题(要求手写代码)

1.用正则和非正则,实现一个字符串转为驼峰

非正则

 let str = "get-element-by-id";
    function fun1(str) {
      var strArr = str.split("-");
      for (var i = 1; i < strArr.length; i++) {
        var start = strArr[i].charAt(0).toUpperCase();
        var end = strArr[i].slice(1);
        strArr[i] = start + end;
      }
      return strArr.join("");
    }
    console.log(fun1(str));

正则一

  let str = "get-element-by-id";
    function fun1(str) {
      //\w元字符用来匹配单词字符,它等价于"[a-zA-Z0-9]"。
      var reg = /-(\w)/g; //子项()表示子项
      return str.replace(reg, function($0, $1) {
        //$0代表正则整体,replace()方法中的第二个参数若是回调函数,那么这个回调函数中的参数就是匹配成功后的结果
        //若回调函数中有多个参数时,第一个参数代表整个正则匹配结果,第二个参数代表第一个子项
        console.log($0); //-b
        console.log($1); //b
        return $1.toUpperCase();
      });
    }
    console.log(fun1(str));

正则二

 let str = "get-element-by-id";
    var reg = /-\w/g;
    function fun1(str) {
      //\w元字符用来匹配单词字符,它等价于"[a-zA-Z0-9]"。
      return str.replace(reg, function($) {
        //console.log($); //-e -b -i
        return $.slice(1).toUpperCase();
      });
    }
    console.log(fun1(str));
2.判断一个字符串中出现次数最多的字符,统计这个次数
 var str = "asdfssaaasasasasaa";
    var obj = {};
    for (var i = 0; i < str.length; i++) {
      if (!obj[str.charAt(i)]) {
        obj[str.charAt(i)] = 1;
      } else {
        obj[str.charAt(i)]++;
      }
    }
    var count = 0;
    var word = "";
    for (var i in obj) {
      if (obj[i] > count) {
        count = obj[i];
        word = i;
      }
    }
    console.log("出现次数最多的是:" + word + "出现" + count + "次");
3.写一个获取非行间样式的函数
 //获取非行间样式
    var oDiv2 = document.getElementById("Div2");
    //获取非行间样式 方法,currentStyle是IE中的属性,getComputedStyle是其他浏览器的方法(注意其有两个参数);在非行间样式中,style属性只能去赋值,在行间样式中才能去获取样式;
    function getStyle(obj, attr) {
      //console.log(obj.currentStyle);
      //通过obj.currentStyle是否为真来判断当前浏览器时IE还是其他
      if (obj.currentStyle) {
        //IE
        return obj.currentStyle[attr];
      } else {
        //非IE浏览器
        // console.log(window.getComputedStyle(obj, false)); //返回一个对象  报告元素的所有CSS属性的值
        return window.getComputedStyle(obj, false)[attr];
      }
    }
    console.log(getStyle(oDiv2, "width"));
4.字符串反转
let str = "123456768";
    function fun1(str) {
      return str
        .split("")
        .reverse()
        .join("");
    }
    console.log(fun1(str));
5.将数字 12345678 转化成 RMB 形式 如: 12,345,678
var str = 12345678;
    function fun1(str) {
      var newstr = str + ""; //转成字符串
      let strArr = newstr.split("").reverse();
      let result = [];
      for (let i = 0; i < strArr.length; i++) {
        if (i % 3 === 0 && i !== 0) {
          result.push(",");
        }
        result.push(strArr[i]);
      }
      return result.reverse().join("");
    }
    console.log(fun1(str)); // 12,345,678

你可能感兴趣的:(原生js面试题(要求手写代码))