iT邦幫忙

2021 iThome 鐵人賽

DAY 26
0
Modern Web

每日挑戰,從Javascript面試題目了解一些你可能忽略的概念系列 第 26

每日挑戰,從Javascript面試題目了解一些你可能忽略的概念 - Day26

tags: ItIron2021 Javascript

前言

昨天我們開始了新的系列,剩下這幾天也會以這類型的題目進行!當時這些題目是在模擬面試活動的最後一周跑的,除了練習應用題之外,最主要的目的是讓參與的同學了解提問的重要性以及一些技巧,解題的部份反而變少,把重點放在兩方交流的過程中,希望不管是面對白板題或是面試時隨口拋出的問題也能有一套處理的邏輯,讓回答的過程可以更從容一些!

本日題目與解釋

請寫一個duplicate函數,達成以下的輸出結果

console.log(duplicate([1, 2, 3, 4, 5])) 

// 輸出結果 
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

防雷防雷,聽說你傳說很雷

thinking-day25

從昨天的教訓我們知道,首先你要先釐清問題,那我這邊就幫你省點麻煩吧!

  • 該函數需要回傳一個陣列,該陣列為原陣列與原陣列內的元素相接,像是雙倍的效果
  • 傳入的參數只會有陣列
  • 若傳入空陣列,則回傳空陣列即可

了解這些候你就可以開始動手了,其實你應該也意識到這在考的是你要如何複製一個陣列,只要複製後再與原陣列相連接不就行了? 以下是幾種常見的做法

  • 方法一: loop

經典不敗老招,想不出該怎麼做用迴圈就對了。

function duplicate(arr) {
  const result = [...arr]
  for (let i = 0; i < arr.length; i++) {
    result.push(arr[i])
  }
  return result
}
  • 方法二: 擴展運算子
    看到上方的解法你或許已經意識到了,淺複製的話還是擴展運算子最~快了
function duplicate(arr) {
  return [...arr, ...arr]
}
  • 方法三: concat

最後就是原生的陣列連接的方法,配合apply來使用就更方便了!

function duplicate(arr) {
  return [].concat.apply(arr, arr)
}

當然還有許多其他的方法,不過解決同一個問題我認為提個2~3招就差不多了,當你腦中已經有複數個思路時,建議不要直接將你認為的最佳解丟給對方(除非是筆試),而是先從基礎的作法開始回答,這樣當面試官問你還有沒有其他方法時你才不至於詞窮?

今天的題目就到這邊為止,是不是特別輕鬆簡單呢!

本日核心觀念與總結

核心觀念

陣列淺拷貝、apply

總結

  • 複習如何複製陣列
  • 當有複數解時,盡量不要劈頭就答出最佳解

本文章同步發布於個人部落格,有興趣的朋友也可以來逛逛~!


上一篇
每日挑戰,從Javascript面試題目了解一些你可能忽略的概念 - Day25
下一篇
每日挑戰,從Javascript面試題目了解一些你可能忽略的概念 - Day27
系列文
每日挑戰,從Javascript面試題目了解一些你可能忽略的概念30

尚未有邦友留言

立即登入留言