iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
自我挑戰組

Jr 前端工程師面試題目檢討賽系列 第 6

【2023 挑戰賽 Day6】 #JS #面試經驗 字串操作

  • 分享至 

  • xImage
  •  

閒聊時間

最近因為督促自己參加鐵人賽而辦了 IG(帳號 @wendy_frontend),發現有一些剛好正在轉職、準備要投履歷、已經工作一兩年又重新要找工作的朋友來跟我聊天,問我前陣子投完履歷的感受如何?市場狀況是不是很差?

我得說我在8月初剛開始投履歷的前一兩個禮拜收到的面試邀請真的是少之又少,但在8月下旬就變成一周安排多達5-6場面談的高峰,有可能是因為我一開始使用的平台不適合(104會比cakeResume更快收到回覆)、也有可能是我自介經過調整後比較吸引人(把心理系背景跟英文成績放在開頭)、也有可能是我大量海投之後整體機會就變多了,所以以我作為初級工程師的體驗來說,並不是沒有面試、沒有工作,但有了面試跟 offer 後,怎麼談判跟抉擇又是一個難關。

以我的個性來說,我很難專心的一邊投履歷一邊做新的專案、學新的東西。而累積許多次的面試經驗後,雖然多次的練習的確會讓自己在面試中的表現更沉穩更順暢,但在心理上來說,在確認最後的 offer 之前,我並沒有覺得心情越來越篤定,反而是常常在忐忑不安、上上下下、期待又失望的過程中擺盪,就像談戀愛在找對象一樣,在想說這次終於會是他了嗎? QAQ

那天重看一次新垣結衣在月薪嬌妻開頭集數中,作為心理學碩士畢業生找工作卻很不順利的畫面,好有共感啊~希望大家都能終成眷屬,不對,找到一個自己在職場上的歸宿。

https://ithelp.ithome.com.tw/upload/images/20230918/20163153801zALPHjE.png

JS 題目:字串處理

今天一樣要來回顧一個我在面試中遇到的題目,這個題目難度比較接近 LeetCode Easy(或比 Easy 更簡單一點)。

題目描述:

完成一個 JavaScript 函數 getMiddle(str),此函數僅接受字串類型的參數資料,且限制輸入字串的長度範圍為 0 < str.length < 1000。該函數的目標是根據字串的長度來決定返回什麼樣的中間字符或字符組合。

如果輸入字串的長度為單數,函數應該返回字串中的單一中間字符。
如果輸入字串的長度為雙數,函數則應該返回字串中的兩個中間字符。

例如

console.log(getMiddle("Wendy")); // 返回 "n"
console.log(getMiddle("good")); // 返回 "oo"

作答(無註解版):

function getMiddle(str) {
  if (typeof str === 'string' && str.length > 0 && str.length < 1000) {
    const middleIndex = Math.floor(str.length / 2);
    if (str.length % 2 === 0) {
      return str.substring(middleIndex - 1, middleIndex + 1);
    } else {
      return str.charAt(middleIndex);
    }
  } else {
    return "請輸入長度介於1到999之間的有效字串。";
  }
}

作答(詳細註解版,適合用電腦看):

function getMiddle(str) {
  // 確認輸入的 input 為字串,且長度介於 1 至 999 之間
  if (typeof str === 'string' && str.length > 0 && str.length < 1000) {
    // 找到字串最中間的 index,如果無法整除(ex: 5/2=2.5),則用 Math.floor 向下取整數
    const middleIndex = Math.floor(str.length / 2);

    if (str.length % 2 === 0) {
      // 如果剛好可以整除(例如8/2的餘數為0),則需要返回 index 與 index+1 位置的字符
      // 使用 substring() 提取兩個字符,第一個參數為字符開始的 index,第二個參數為字符結束後一個 index
      // 例如: 'good' 的長度為 4,middleIndex 為 2,且長度可以被 2 整除,我們要提取'oo' 須輸入 2-1 及 2+1 索引的字符 
      return str.substring(middleIndex - 1, middleIndex + 1);
    } else {
      // 如果無法整除,則直接返為中間值 index 的單一個字符
      // 使用 charAt() 方法返回一個指定位置的字符
      return str.charAt(middleIndex);
    }
  } else {
    // 如果 input 不符合字串資料類型及長度的要求,返回錯誤提示
    return "請輸入長度介於1到999之間的有效字串。";
  }
}

在這裡我們複習了一個處理數字、兩個處理字串的方法

1. Math.floor()

只接受數字作為參數,可以將有小數點的數字(符點數)取整數,例如:

Math.floor(3.14159) // 3

2. str.substring(startIndex, endIndex)

substring() 用於提取字串中的子字串,接受兩個數字參數作為開始及結束的索引值(注意:結束的索引值不包含在子字串內)。例如:

const me = "wendy"
me.substring(0,3) //"wen" 

3. str.charAt(index)

charAt 的 char 代表 character(字元、字符),所以 charAt() 方法接受一個數字參數,可以用來提取字串中指定索引值的字符。例如:

const str = "Hello";
str.charAt(4) // o

今天先到這裡,明天見!


上一篇
【2023 挑戰賽 Day5】 #JS #面試經驗 邏輯及陣列處理
下一篇
【2023 挑戰賽 Day8】我...我斷賽了 (還是有練一題 JS)
系列文
Jr 前端工程師面試題目檢討賽14
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言