20200902笔试题—— js对象(含数组)下划线转驼峰

  • js对象(含数组)下划线转驼峰
	changeIntoHumpName(oldObj){
     
        let newObj={
     }
        Object.keys(oldObj).forEach((oldKey)=>{
     
          //方法①
          let keyArr = oldKey.split("_")
          let newKey = keyArr[0];
          keyArr.forEach((item,index)=>{
     
            if(index>0){
     
              newKey+= item.slice(0,1).toUpperCase() + item.slice(1)
            }
          })
          //方法②
          // const a='_'+oldKey[oldKey.indexOf('_')+1]
          // const b=oldKey[oldKey.indexOf('_')+1].toLocaleUpperCase ()
          // const newKey=oldKey.replace(a,b)
          newObj[newKey]=oldObj[oldKey]
          if(Array.isArray(oldObj[oldKey])){
     
            oldObj[oldKey].forEach((item,index)=>{
     
              newObj[newKey][index]=this.changeIntoHumpName(item)
            })
          }
        })
        return newObj

		test:{
     
          a_name_name:'a',
          b_name:'b',
          c_name:[{
     d_name:'d'},{
     e_name:[{
     f_name:'f'}]}]
        }
        
		this.changeIntoHumpName(this.test)
      	//方法①输出{ "aNameName": "a", "bName": "b", "cName": [ { "dName": "d" }, { "eName": [ { "fName": "f" } ] } ] }
      	//方法②输出{ "aName_name": "a", "bName": "b", "cName": [ { "dName": "d" }, { "eName": [ { "fName": "f" } ] } ] }
  • js对象(含数组)根据目标字符串层次取值
      getValue(obj,str,def){
     
        let keyArr = str.split(".")
        keyArr.forEach((item,index)=>{
     
          obj=obj[keyArr[index]]
        })
        return obj?obj:def
      },
      test:{
     
        a:{
     
          b:{
     
            c:'c1'
          }
        },
        d:[{
     e:'e1'},{
     f:'f1'}]
      }
      this.getValue(this.test,'a.b.c','default')
      //输出 c1
      this.getValue(this.test,'d.0.e','default')
      //输出 e1
      this.getValue(this.test,'a.b.h','default')
      //输出 default   
  • 异步执行的顺序(promise)
    【参考①: 关于异步执行顺序】
    【参考②(详细):通过microtasks和macrotasks看JavaScript异步任务执行顺序】
    【参考③(深入):这一次,彻底弄懂 JavaScript 执行机制】
	getTest(){
     
        setTimeout(()=> {
     
          console.log(1)
        })
        new Promise((resolve)=> {
     
          console.log(2)
          resolve()
          console.log(3)
        }).then(()=> {
     
          console.log(4)
        })
        console.log(5)
     }
     this.getTest()
     //按序输出 2、3、5、4、1

你可能感兴趣的:(面试,javascript)