每日挑战,从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

总结

  • 复习如何复制阵列
  • 当有复数解时,尽量不要劈头就答出最佳解

本文章同步发布於个人部落格,有兴趣的朋友也可以来逛逛~!


<<:  【Day30】[演算法]-线性搜寻法Linear Search

>>:  [Day26] Vue3 E2E Testing: Cypress 实战之 Todo MVC (中)

什麽是零信任(What is Zero Trust)?

零信任是一种网络安全范式,用於支持可见性的细粒度,动态和以数据为中心的访问控制。 (访问控制基於需要...

[Github] Github 打破100MB限制 上传大型档案 ㄏㄏ

安装 https://git-lfs.github.com/ $ git lfs install $...

【D18】调整一下步伐,看看现在学到什麽

前言 进度已经超过一半,发现架构有点混乱,所以现在先整理一下,学会到什麽,以及怎麽运用,未来会怎样前...

Day.10 Stack

Stack(堆叠)是一种後进先出(LIFO)的资料结构 看一下图 注:图源 你可以想像一下在厨房洗碗...

【Day27】[演算法]-堆积排序法 Heap Sort

堆积排序法(Heap Sort)原理是利用「堆积」的资料结构为基础来完成排序。 堆积的介绍可以参考此...