11-16 笔试

这篇博客介绍了JavaScript中将变量名转换为小驼峰写法的函数,实现了一个简单的四则运算计算器,其中除法向下取整,并探讨了两种比较两个二叉树是否相同的方法,包括递归和JSON转换比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.实现一个计算器
"±*/"的运算,其中 除法向下取整,输入一个字符串,算出结果

const fn = (num) => {
    return {
        add: (n) => fn(num + n),
        mine: (n) => fn(num - n),
        take: (n) => fn(num * n),
        divide: (n) => fn(Math.floor(num / n)),
        res: () => num
    }
}
let res = fn(5).add(10).mine(14).take(15).divide(6).res() // 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
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳晓黑胡椒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值