AC上這周再度回到JS的課程上,今天利用一個簡單的加密程式做字串以及陣列的複習。
假設今天我們需要讓使用者的資訊做以下的加密
Danny -> Da*** //只保留開頭兩個字
windate3411@gmail.com ->winda......@gmail.com //保留@之前的一半字元以及@後方的完整email,若前方的字元為奇數,則保留較少的字 ex. Danny ->Da...
const encodeName = name => {
//write some codes here
}
第一個姓名加密的手法非常簡單,直覺上利用簡單的for 迴圈便可以簡單地達成。但今天要處理的是字串,所以首先必須利用Array.from 將字串轉為陣列,此方法同樣適用於object。再利用for 迴圈將前兩位以外的字元都轉為’*’
// inside the function
name = Array.from(name)
for (let i = 2; i<name.length; i++){
name[i] = '*'
}
處理到這邊都還保留著陣列的形式,所以最後需要再利用join()將陣列轉回字串回傳
// inside the function
name = Array.from(name)
for (let i = 2; i<name.length; i++){
name[i] = '*'
}
return name.join('') //''表示陣列間的字元將無間隔的連接在一起
加密名字真的相當容易,後續的email加密就有些麻煩了,這邊先記錄我的初始作法,之後有想到更簡單的寫法會再寫一篇。
const encodeEmail = email => {
//建立空字串最後連結前面加密部分以及後面email
empty=''
let index = email.indexOf('@')
let former = email.slice(0,index)
let latter = email.slice(index)
//將@以前的部分轉為陣列,利用之前加密名字的手法處理
former = Array.from(former)
//由於只需要加密一半,且奇數時必須退位,利用floor做無條件退位
for (let i = Math.floor(former.length/2); i < former.length; i++){
former[i] = '.'
}
//處理完後再次轉為字串,並與後者連接
former = former.join('')
empty = former + latter
return empty
}
分段解釋一下上面的程式碼。
整體概念是將輸入的字串拆解成兩部分並分別存入兩個變數
前者採取與姓名加密類似的處理,後者則不做額外處理
最後再將兩字串連接起來。
為了以@為分界點做拆解,必須使用indexOf()的方法找出所在的位置
再配合slice()去做字串的切割,特別注意一下slice(x,y)中x表示index起點,y表示終點,若省略終點則會自動判斷為一直到字串的最後。
利用簡單的小專案做複習其實還蠻有效率的,說不定之後直接開個專區會更好。