前端常見(jiàn)的面試手寫(xiě)代碼

web 前端工程師在面試時(shí),常常會(huì)被要去現(xiàn)場(chǎng)手寫(xiě)/機(jī)寫(xiě)代碼边酒。涉及的內(nèi)容包括常用的排序算法狸窘、查找算法朦前;JavaScript 語(yǔ)言中常用的幾種編程技巧,例如函數(shù)防抖春哨、節(jié)流恩伺、深拷貝、淺拷貝等凰荚。

數(shù)組與對(duì)象的深拷貝

深拷貝與淺拷貝的區(qū)別在于復(fù)制成員的層數(shù),淺拷貝是對(duì)輸入數(shù)組/對(duì)象的簡(jiǎn)單遍歷褒脯,而沒(méi)有考慮到輸入的數(shù)組/對(duì)象成員的類(lèi)型便瑟,當(dāng)它是對(duì)象或數(shù)組時(shí),單層的便利可以無(wú)法復(fù)制深層的組成成員番川,因此需要進(jìn)行深拷貝到涂,知道遍歷的成員再無(wú)子成員,類(lèi)似于二叉樹(shù)的遍歷到葉子節(jié)點(diǎn)颁督。

數(shù)組

// a array deepCopy demo
var res = [];
function deepCopy(arr) {
  arr.forEach( ele => {
    if(Array.isArray(ele)) {
      deepCopy(ele);
    }else {
      res.push(ele);
    }
  });
  return res;
}

var demoArr = [1,2,3,[3,4,5,[5,6,7]],9];
console.log(deepCopy(demoArr));
// [1, 2, 3, 3, 4, 5, 5, 6, 7, 9]

簡(jiǎn)單的遞歸算法践啄,判斷當(dāng)前子節(jié)點(diǎn)是不是數(shù)組,如果是數(shù)組調(diào)用自身沉御,對(duì)子節(jié)點(diǎn)再次進(jìn)行遍歷屿讽;如果不是,直接存入結(jié)果數(shù)組res中伐谈。

類(lèi)似的還有對(duì)一個(gè)對(duì)象的深拷貝:

// a object deepCopy demo
var res = {};

function objDeepCopy (obj) {
  for(var ele in obj ) {
    if(typeof ele === 'object') objDeepCopy(ele);
    else {
      res[ele] = obj[ele];
    }
  }
  return res;
}

var demoObj = {
  name: 'fejavu',
  age: 23,
  hobby: {
    hobby1: 'book',
    hobby2: 'movie'
  }
};

console.log(objDeepCopy(demoObj));
/*
[object Object] {
  age: 23,
  hobby: [object Object] {
    hobby1: "book",
    hobby2: "movie"
  },
  name: "fejavu"
}
*/

判斷子節(jié)點(diǎn)是不是對(duì)象烂完,是則調(diào)用自身進(jìn)行深層遍歷,否則直接存入結(jié)果對(duì)象中衩婚。

JavaScript 有許多奇技淫巧窜护,或者說(shuō)是語(yǔ)言本身的語(yǔ)法糖效斑。在日常的對(duì) JSON 數(shù)據(jù)的處理中非春,就涉及到類(lèi)似把數(shù)組/對(duì)象拍平(深拷貝),因此深拷貝可以說(shuō)是已經(jīng)集成在語(yǔ)言的常用函數(shù)本身:

var demoObj = {
  name: 'fejavu',
  age: 23,
  hobby: {
    hobby1: 'book',
    hobby2: 'movie'
  }
};
var demoArr = [1,2,3,[3,4,5,[5,6,7]],9];

console.log(JSON.parse(JSON.stringify(demoObj)));
console.log(JSON.parse(JSON.stringify(demoArr)));

實(shí)現(xiàn)一個(gè)instanceOf函數(shù)

主要思路是檢驗(yàn)需校驗(yàn)的原型是否在實(shí)例的原型鏈上缓屠,如果是則返回true奇昙,否則返回false

function instanceOf(instan, proto) {
  let _instanProto = instan.__proto__;
  
  if(_instanProto && _instanProto === proto.prototype) {
    return true;
  }else {
    return instanceOf(_instanProto, proto);
  }
  
  return false;
}

let arr = 'new Array()';
console.log(instanceOf(arr, Object));  // true
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末敌完,一起剝皮案震驚了整個(gè)濱河市储耐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌滨溉,老刑警劉巖什湘,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異晦攒,居然都是意外死亡闽撤,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén)脯颜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)哟旗,“玉大人,你說(shuō)我怎么就攤上這事栋操≌⒉停” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵矾芙,是天一觀的道長(zhǎng)舍沙。 經(jīng)常有香客問(wèn)我,道長(zhǎng)剔宪,這世上最難降的妖魔是什么场勤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮歼跟,結(jié)果婚禮上和媳,老公的妹妹穿的比我還像新娘。我一直安慰自己哈街,他們只是感情好留瞳,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著骚秦,像睡著了一般她倘。 火紅的嫁衣襯著肌膚如雪璧微。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,730評(píng)論 1 289
  • 那天硬梁,我揣著相機(jī)與錄音前硫,去河邊找鬼。 笑死荧止,一個(gè)胖子當(dāng)著我的面吹牛屹电,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播跃巡,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼危号,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了素邪?” 一聲冷哼從身側(cè)響起外莲,我...
    開(kāi)封第一講書(shū)人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎兔朦,沒(méi)想到半個(gè)月后偷线,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沽甥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年声邦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片安接。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡翔忽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盏檐,到底是詐尸還是另有隱情歇式,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布胡野,位于F島的核電站材失,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏硫豆。R本人自食惡果不足惜龙巨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望熊响。 院中可真熱鬧旨别,春花似錦、人聲如沸汗茄。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至递览,卻和暖如春叼屠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绞铃。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工镜雨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人儿捧。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓荚坞,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親纯命。 傳聞我的和親對(duì)象是個(gè)殘疾皇子西剥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容