2022腾讯-医疗前端面试题目

263 阅读1分钟

1、实现 find 函数,满足 find(data).where(XXX).orderBy('','desc')

image.png

const find = function(origin){
  let obj = new Object(origin);
  Object.defineProperty(obj,'where',{
    configurable:true,//是否可配置
    enumerable:false,//是否可迭代
    writable:false,//是否可写
    value:function(where){
      for(let key in where){
        if(where.hasOwnProperty(key)){
          obj = obj.filter((v)=>where[key].test(v[key]))
        }
        return find(obj)
      }
      
    }
  });
  Object.defineProperty(obj,'orderBy',{
    configurable:true,//是否可配置
    enumerable:false,//是否可迭代
    writable:false,//是否可写
    value:function(key,order){
      obj.sort((a,b)=>{
        if(order=='desc'){
          return b[key]-a[key]
        }else{
          return a[key]-b[key]
        }
      })
      return find(obj)
    } 
  })
  return obj;
}

2、实现数组的flat方法,支持传入递归深度

image.png

function myFlat (arr,departh){
    // if(!arr || Array.isArray(arr)) throw('参数错误')
 let res =[] // 存放扁平化数组
 let deep = departh
 arr.forEach(element => {
    if(Array.isArray(element)&&departh>=0){
        res = res.concat(arguments.callee(element,departh-1))
    }else{
        res.push(element)
    }
 });
 return res
}

就两题,祝大家取得好成绩