javascript腾讯前端高频手写面试题个人文章

var_=require('lodash');varobj1={a:1,b:{f:{g:1}},c:[1,2,3]};varobj2=_.cloneDeep(obj1);console.log(obj1.b.f===obj2.b.f);//false(3)手写实现深拷贝函数//深拷贝的实现functiondeepCopy(object){if(!object||typeofobject!=="object")return;letnewObject=Array.isArray(object)[]:{};for(letkeyinobject){if(object.hasOwnProperty(key)){newObject[key]=typeofobject[key]==="object"deepCopy(object[key]):object[key];}}returnnewObject;}手写Object.create思路:将传入的对象作为原型

functioncreate(obj){functionF(){}F.prototype=objreturnnewF()}查找字符串中出现最多的字符和个数例:abbcccddddd->字符最多的是d,出现了5次

letstr="abcabcabcbbccccc";letnum=0;letchar='';//使其按照一定的次序排列str=str.split('').sort().join('');//"aaabbbbbcccccccc"//定义正则表达式letre=/(\w)\1+/g;str.replace(re,($0,$1)=>{if(num<$0.length){num=$0.length;char=$1;}});console.log(`字符最多的是${char},出现了${num}次`);实现add(1)(2)(3)函数柯里化概念:柯里化(Currying)是把接受多个参数的函数转变为接受一个单一参数的函数,并且返回接受余下的参数且返回结果的新函数的技术。

1)粗暴版

functionadd(a){returnfunction(b){returnfunction(c){returna+b+c;}}}console.log(add(1)(2)(3));//62)柯里化解决方案

varadd=function(m){vartemp=function(n){returnadd(m+n);}temp.toString=function(){returnm;}returntemp;};console.log(add(3)(4)(5));//12console.log(add(3)(6)(9)(25));//43对于add(3)(4)(5),其执行过程如下:

functionadd(...args){//求和returnargs.reduce((a,b)=>a+b)}functioncurrying(fn){letargs=[]returnfunctiontemp(...newArgs){if(newArgs.length){args=[...args,...newArgs]returntemp}else{letval=fn.apply(this,args)args=[]//保证再次调用时清空returnval}}}letaddCurry=currying(add)console.log(addCurry(1)(2)(3)(4,5)())//15console.log(addCurry(1)(2)(3,4,5)())//15console.log(addCurry(1)(2,3,4,5)())//15实现非负大整数相加JavaScript对数值有范围的限制,限制如下:

Number.MAX_VALUE//1.7976931348623157e+308Number.MAX_SAFE_INTEGER//9007199254740991Number.MIN_VALUE//5e-324Number.MIN_SAFE_INTEGER//-9007199254740991如果想要对一个超大的整数(>Number.MAX_SAFE_INTEGER)进行加法运算,但是又想输出一般形式,那么使用+是无法达到的,一旦数字超过Number.MAX_SAFE_INTEGER数字会被立即转换为科学计数法,并且数字精度相比以前将会有误差。

实现一个算法进行大数的相加:

functionsumBigNumber(a,b){letres='';lettemp=0;a=a.split('');b=b.split('');while(a.length||b.length||temp){temp+=~~a.pop()+~~b.pop();res=(temp%10)+res;temp=temp>9}returnres.replace(/^0+/,'');}其主要的思路如下:

Array.from(document.querySelectorAll('div'))方法二:Array.prototype.slice.call()Array.prototype.slice.call(document.querySelectorAll('div'))方法三:扩展运算符[...document.querySelectorAll('div')]方法四:利用concatArray.prototype.concat.apply([],document.querySelectorAll('div'));数组去重constarr=[1,1,'1',17,true,true,false,false,'true','a',{},{}];//=>[1,'1',17,true,false,'true','a',{},{}]方法一:利用Setconstres1=Array.from(newSet(arr));方法二:两层for循环+spliceconstunique1=arr=>{letlen=arr.length;for(leti=0;i{constres=[];for(leti=0;i

constunique3=arr=>{constres=[];for(leti=0;i{returnarr.filter((item,index)=>{returnarr.indexOf(item)===index;});}方法六:利用Mapconstunique5=arr=>{constmap=newMap();constres=[];for(leti=0;i

vararr=[1,2,3,4,5,6,7,8,9,10];for(vari=0;i

vararr=[1,2,3,4,5,6,7,8,9,10];letlength=arr.length,randomIndex,temp;while(length){randomIndex=Math.floor(Math.random()*length--);temp=arr[length];arr[length]=arr[randomIndex];arr[randomIndex]=temp;}console.log(arr)实现prototype继承所谓的原型链继承就是让新实例的原型等于父类的实例:

//父方法functionSupperFunction(flag1){this.flag1=flag1;}//子方法functionSubFunction(flag2){this.flag2=flag2;}//父实例varsuperInstance=newSupperFunction(true);//子继承父SubFunction.prototype=superInstance;//子实例varsubInstance=newSubFunction(false);//子调用自己和父的属性subInstance.flag1;//truesubInstance.flag2;//false手写Promise.all1)核心思路

2)实现代码

一般来说,Promise.all用来处理多个并发请求,也是为了页面数据构造的方便,将一个页面所用到的在不同接口的数据一起请求过来,不过,如果其中一个接口失败了,多个请求也就失败了,页面可能啥也出不来,这就看当前页面的耦合程度了

functionpromiseAll(promises){returnnewPromise(function(resolve,reject){if(!Array.isArray(promises)){thrownewTypeError(`argumentmustbeaarray`)}varresolvedCounter=0;varpromiseNum=promises.length;varresolvedResult=[];for(leti=0;i{resolvedCounter++;resolvedResult[i]=value;if(resolvedCounter==promiseNum){returnresolve(resolvedResult)}},error=>{returnreject(error)})}})}//testletp1=newPromise(function(resolve,reject){setTimeout(function(){resolve(1)},1000)})letp2=newPromise(function(resolve,reject){setTimeout(function(){resolve(2)},2000)})letp3=newPromise(function(resolve,reject){setTimeout(function(){resolve(3)},3000)})promiseAll([p3,p1,p2]).then(res=>{console.log(res)//[3,1,2]})实现数组去重给定某无序数组,要求去除数组中的重复数字并且返回新的无重复数组。

ES6方法(使用数据结构集合):

constarray=[1,2,3,5,1,5,9,1,2,8];Array.from(newSet(array));//[1,2,3,5,9,8]ES5方法:使用map存储不重复的数字

constarray=[1,2,3,5,1,5,9,1,2,8];uniqueArray(array);//[1,2,3,5,9,8]functionuniqueArray(array){letmap={};letres=[];for(vari=0;i

constfn=()=>{return[...newSet([...document.querySelectorAll('*')].map(el=>el.tagName))].length;}值得注意的是:DOM操作返回的是类数组,需要转换为数组之后才可以调用数组的方法。

THE END
1.肿瘤一线二线三线治疗到底是什么意思?很多人都理解错了!肿瘤一线、二线、三线治疗到底是什么意思?很多人都理解错了! 在肿瘤治疗的过程中,很多患者和家属经常会听到或看到一些一线治疗、二线治疗、三线治疗等治疗线数(LOT)这样的词。 那么,什么是“治疗线数(LOT)”?一二三线治疗分别指的是什么?https://mp.weixin.qq.com/s?__biz=MzU4NzcxNzE4OA==&mid=2247530571&idx=2&sn=00675b263cad19ddac617cfe121e4b7d&chksm=fde5f760ca927e769d499a66fbaf4bc61cb40bbcf8d5eb2fabc3049281d1989fbc357ef4e3c9&scene=27
2.handwrite2loveX001的博客let str = "abcabcabcbbccccc"; let num = 0; let char = ''; // 使其按照一定的次序排列 str = str.split('').sort().join(''); // "aaabbbbbcccccccc" // 定义正则表达式 let re = /(\w)\1+/g; str.replace(re,($0,$1) => { if(num < $0.length){ num = $0.length; chahttps://blog.csdn.net/loveX001/article/details/129223815
3.BBC的ABC是个什么鬼这剧看到一集半的时候差点要吐了,我到底是为了什么看这剧的?还不是因为阿婆,还不是因为她笔下的赫尔克里·波洛,矮胖大侦探波罗。 然而BBC的这部《ABC谋杀案》究竟是个什么东西? 首先,波洛的外在形象,不再是个矮胖,而且没有了神气的小胡子,也没强迫症也没洁癖,秃顶彻底成了秃头。这些都可以接受的,真的可以,毕https://www.jianshu.com/p/40ce37fa8f23
4.高中语文必备文学常识100题1—5BBABB6—10ACBBC 11—15BAAAA16—20ABABD 21—25BDCAB26—30ABCAB 31—35BBABB36—40AACAA 41—45BBABA46—50ABACC 51—55BBBBB56—60BACCB 61—65DABBD66—70ABBAD 71—75DDDCC76—80ABCBB 81—85BBDCB86—90BCCCB 91—95AAAAD96—100BBCCChttps://www.ruiwen.com/zuowen/wenxuechangshi/1147524.html
5.burstintotears是什么意思burstintotears怎么读听听怎么读 是什么意思 释义 突然大哭;流泪;夺眶而出; 学习怎么用 双语例句 When she saw me she burst into tears. 她一看见我就放声大哭。 Somehow or other, the baby burst into tears. 那个婴儿不知为什么大哭起来。 My wife burst into tears when she heard the bad news. https://www.koolearn.com/dict/wd_22380.html
6.你9岁时在做什么?盘点世界各地“明星神童”这场一对一PK在世锦赛选手休息室进行,拿单的对手是个性“飞镖之王”、BBC飞镖节目评论员博比·乔治。比赛是一镖定胜负,用了拿单随身带的一副飞镖盘,放在椅子上进行。拿单先投,一下命中红心,而“飞镖之王”随后没能命中。“太不可思议了,所有选手都停下来看了比赛,他们都不敢相信自己的眼睛。”拿单的爸爸https://wap.eastmoney.com/a/20120711221519633.html
7.被质疑造假?嫦娥六号月面起飞:无火无烟,究竟是什么黑科技?火箭着陆这个评论如何?看着是不是有点像CCTV官方的那味?当然并不只是CNN,还有BBC和路透社以及ABC和NBC等媒体,只是夸奖的角度不一样而已!而在6月4日中国成功采样并且上升到近月轨道后,报道口风又有些许改变了,这会下场报道的是英媒每日邮报、BBC SkyNight专栏与路透社以及半岛电视台和SPACE.COM等媒体。 https://www.163.com/dy/article/J44IUHGM05322ICO.html
8.一个有意思的python软件逆向吾爱破解zQBbCXuLkeGUX__IA3jjPclyf_CsnZ1U2OPQn75SXDARlVmqpAvAMOpg0vqAVds2pBnpGIwPS4nMcQpnMiS0Mf51tNhttps://www.52pojie.cn/thread-1940456-1-1.html
9.薄智跃美国国家新闻俱乐部等,是博鳌亚洲论坛首尔会议2018第一分论坛的主持人和演讲嘉宾。薄智跃是BBC、ABC、CNBC、 CCTV、 Channel NewsAsia、 New York Times、the Financial Times、 Washington Post、 Reuters、 the Guardian、 the Times、 Bloomberg、 新华社、人民日报、Strait Times等国内外媒体的采访对象。https://baike.baidu.com/item/%E8%96%84%E6%99%BA%E8%B7%83/8556614