1.将输入的变量名转换为小驼峰写法
可能的输入命名格式如下:
TestVariable
test_variable
TEST_VARIABLE,
最终输出为testVariable
function format(name) {
//字符串为空
if (!name) return name
//存在"_",把全部的字母改小写
if (name.indexOf("_") !== -1) {
name = name.toLowerCase()
} else {
// 不存在"_",把首字母改小写
let strAry = name.split('');
strAry[0] = strAry[0].toLowerCase();
name = strAry.join('');
}
//把所有的 _[A-Za-z] 替换为 _大写字母
let newStr = name.replace(/\_([A-Za-z])/g, function (_, str1) {
return str1.toUpperCase()
})
return newStr
}
扩展正则
正则传参
let str = '+0-1*2/3'
let res = str.replace(/(\+[\d])(\-[\d])(\*[\d])(\/[\d])/g,function(all,str1,str2,str3,str4){
console.log(all)//+0-1*2/3 匹配的全部字符串
console.log(str1)//+0 第一个括号匹配的内容
console.log(str2)//-1 第二个括号匹配的内容
console.log(str3)//*2 第三个括号匹配的内容
console.log(str4)///3 第四个括号匹配的内容
return "xiaoliu 666"
})
console.log(res)//xiaoliu 666
2.实现一个计算器
"±*/"的运算,其中 除法向下取整,输入一个字符串,算出结果
例如输入 "2+2*2"
输出 6
function computed(str){
// 存在 / 除号,就加上 Math.floor( )字符串
if(str.indexOf("/") !== -1){
str = str.replace(/([\d+])\/([\d])/g,function(all,str1,str2){
return 'Math.floor(' + str1 + '/' + str2+ ')'
})
}
return eval(str)
}
3.两个二叉树完成相同
class Tree{
constructor(v,children){
this.v = v
this.children = children || null
}
}
const tree1 = new Tree(10,[new Tree(5),new Tree(3)])
const tree2 = new Tree(9,[new Tree(5),new Tree(3)])
方法一:递归
function isObjectEqual(obj1,obj2){
let flag= true
const Fn = function(obj1,obj2){
if(obj1 === null && obj2 !== null || obj2 === null && obj1 !== null){
return flag = false
}
if(obj1 === null || obj2 === null)return
if(typeof obj1 !== "object" || typeof obj2 !== "object"){
flag = (obj1 === obj2)
}
for(let key in obj1){
if(typeof obj1[key] !== "object"){
if(obj1[key] !== obj2[key]){
flag = false
}
}else{
Fn(obj1[key],obj2[key])
}
}
}
Fn(obj1,obj2)
return flag
}
方法二:JSON
function isObjectEqual(obj1, obj2) {
let str1 = JSON.stringify(obj1)
let str2 = JSON.stringify(obj2)
return str1 === str2
}