原生js面试题(要求手写代码)
2019-07-30 本文已影响0人
JuneLau
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