1. 程式人生 > 其它 >傳說中的前端100問

傳說中的前端100問

一、第1-10題

  1. (滴滴)寫react、vue專案是為什麼要在列表元件中寫key,其作用是什麼?

key是給每一個vnode的唯一id,可以依靠key,更準確,更快的拿到oldVnode中對應的vnode節點

  2.什麼是防抖、節流?有什麼區別?如何實現?

防抖:觸發高頻事件後n秒內只會執行一次,如果n秒內高頻事件再次被觸發,測重新計算事件

思路:每次觸發事件時都會取消之前的延時回撥方法.

節流:高頻事件觸發,但在n秒內只會執行一次,所以節流會稀釋函式的執行頻率

思路:每次觸發事件時都判斷當前是否有等待執行的延時函式

  3.介紹一下set、map、weakSet和weakMap的區別?

set和map主要的應用場景在於資料重組和資料儲存

set是一個叫做集合的資料結構類似於陣列,但是成員時唯一且無序的,沒有重複的值

//陣列去重
let arr=[1,2,3,4,1]
[...new Set(arr)]

向set中加入值時,不會發生型別轉換

weakSet物件允許你將弱引用物件儲存在一個集合中

weakset物件於set的區別:

  weakset只能儲存物件引用,不能存放值,而set物件都可以

Map(字典)集合與字典的區別:

  共同點:集合、字典可以儲存不重複的值

  不同點:集合是以【vaue,value】的形式儲存,字典是以[key,value]的形式儲存

  • 本質上時鍵值對的集合,類似集合
  • 可以遍歷,方法很多可以跟各種資料格式轉化

weakMap

  • 只接受物件作為鍵名,不接受其他型別的值作為鍵名
  • 鍵名時弱引用,鍵值可以是任意的,鍵名所指向的物件可以被垃圾回收,此時鍵名是無效的
  • 不能遍歷,方法有get、set、has、delete

  4.已知如下陣列:

var arr=[ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];編寫一個程式將陣列扁平化並去除其中重複部分資料,最終得到一個升序且不重複的陣列

var arr=[ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13
, [14] ] ] ], 10]; let arr1=[]; arr1=[...new Set(arr.flat(Infinity))].sort((a,b)=>a-b) console.log(arr1)

  5.有以下3個判斷陣列的方法,請分別介紹他們的區別和優劣

Object.prototype.toString.call()、instanceof以及Array.isArray()

1.Object.prototype.toString.call()這種方法對於所有基本的資料型別都能進行判斷,即使是null和undefined.

2.instanceof的內部機制是通過判斷物件向的原型鏈中是不是能找到型別的prototype。

  [] instanceof Array;//true

3.Array.isArray()

  6.請把兩個陣列 ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'] 和 ['A', 'B', 'C', 'D'],合併為 ['A1', 'A2', 'A', 'B1', 'B2', 'B', 'C1', 'C2', 'C', 'D1', 'D2', 'D']。

let a1=['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'];
let a2=['A','B','C','D'].map((item)=>{
   return item+3 
});
let a3=[...a1,...a2].sort().map((item)=>{
   if(item.includes('3')){
       returen item.split('')[0]
}
return item
})
勤學似春起之苗,不見其增,日有所長; 輟學如磨刀之石,不見其損,日所有虧!