JS

前端常见面试题十九

2019-07-31  本文已影响39人  jw_fc89

目录:
1、用正则和非正则,实现一个字符串转为驼峰
2、判断一个字符串中出现次数最多的字符,统计这个次数
3、写一个获取非行间样式的函数
4、字符串反转,如将 '12345678' 变成 '87654321'
5、将数字 12345678 转化成 RMB 形式 如: 12,345,678

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

非正则

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

正则

let str = 'get-element-by-id';
function toCamBakStr(str) {
    return str.replace(/\-\w/g, ([,word]) => {
        return word.toUpperCase()
    })
}
let newStr = toCamBakStr(str);
console.log(newStr);  // getElementById

2、判断一个字符串中出现次数最多的字符,统计这个次数

let str = "asdfssaaasasasasaa";
console.log(getNumber(str));
function getNumber(str) {
  //定义一个空的对象存储数据
  let obj = {};
  //这个对象是用来存储最终结果
  let result = {
    word: "",
    count: 0
  };
  //遍历数据
  for (let i = 0; i < str.length; i++) {
    //判断空的对象中有没有值,有的就是当前值++ 没有的就让值为1
    if (obj[str[i]]) {
      obj[str[i]]++;
    } else {
      obj[str[i]] = 1;
    }
  }
  //这个遍历是遍历obj对象里的值
  for (let key in obj) {
    //如果对象一个值比结果对象里的数字大,那么这个值就是最终结果。
    if (obj[key] > result.count) {
      result.word = key;
      result.count = obj[key];
    }
  }
  return result;
}

3、写一个获取非行间样式的函数

let app = document.getElementById('app');
function getStyle(el, attr) {
    // currentStyle 是IE浏览器获取非行间样式的方法
    // 返回一个样式对象,通过指定属性名取到对应的属性值
    if(el.currentStyle) {
        return el.currentStyle[attr];
    }else {
        // getComputedStyle 是其他浏览器获取非行间样式的方法
        // 两个参数,第二个参数可以是要匹配的伪类元素字符串
        // 对于普通元素来说可以不写,也可以是null
        // 返回一个样式对象,通过指定属性名取到对应的属性值
        return window.getComputedStyle(el, null)[attr]
    }
}
console.log(getStyle(app, 'width')); // 500px

4、字符串反转,如将 '12345678' 变成 '87654321'

let str = "abcdefg";
function strReverse(str) {
  //将字符串通过split("") 切割为数组, 用reverse() 实现数组的反转 ,通过join("")
  //将数组转换为字符串。
  return console.log(
    str
      .split("")
      .reverse()
      .join("")
  );
}
strReverse(str);

5、将数字 12345678 转化成 RMB 形式 如: 12,345,678

let str = 12345678;

toRMB(str);

function toRMB(str) {
  //创建一个空的数组 用来存储转换的值
  let arr = [];
  //将数字转换为字符串,然后转 切割为数组,并反转
  let str1 = (str + "").split("").reverse();
  //循环遍历
  for (let i = 0; i < str1.length; i++) {
    //判断条件 三个为一组 并且第一个不为下标0
    if (i % 3 === 0 && i != 0) {
      arr.push(","); //数组中添 加 ","目的是为了分割
    }
    //将字符添加到空的数组中
    arr.push(str1[i]);
  }
  //最终将处理好的数组反转并转换为字符串
  console.log(arr.reverse().join(""));
}
上一篇 下一篇

猜你喜欢

热点阅读