看程式碼=理解程式碼如何運作
除蟲教學(1)- Chrome Devtool Debugger
- Chrome Devtool 時間差問題 : 通常會發生在,你log這個東西,但後面又去改它,這時前面log會顯示這個變數最新儲存的值。 array、object都會發生上述問題。解決方法,不要印變數,印字串
JSON.stringify(arr)
//它會在這個時間點把它的狀態保存起來。
除蟲教學(2)- log 加到爆
- 可以從這些log裡面看他的值和我想像的是否一樣
練習(1)- 找次大值
// 想像拿了一副撲克牌,拿最大牌、次大牌放旁邊
// 新的牌有三種狀況,比兩個都小,比最大還大,比次大大但比最大小
let arr =[5,8,6]
let max1=-Infinity
let max2=-Infinity //兩個都設arr[0]會有狀況,ex [6,4,1]
for(var i=0;i<arr.length;i++){
if(arr[i]>max1){
max2=max1
max1=arr[i]
}
else if(arr[i]>max2){
max2=arr[i]
}
}
console.log(max1,max2)
- 要找次大值的陣列
- 把最大值與次大值初始化成很小的數
- 迴圈掃完整個陣列
- i 目前是 0
- arr[0]=5 是否大於 max1
- 是,則原本的最大值變成次大值,arr[0]則變成最大值
- 執行下一圈迴圈,i 目前是 1
- arr[1]=8 是否大於 max1=5
- 是,則max2=5,max1=8
- 執行下一圈迴圈,i 目前是 2
- arr[2]=6 是否大於 max1=5
- 否
- arr[2]=6 是否大於 max2=5
- 是,則max2=6
- 下一圈迴圈,i 目前是 3 ,超出迴圈範圍,迴圈結束
- 印出 max1 and max2
練習(2)- 字串轉大寫
ASCII code : (a=97,z=122;A=65,Z=90) 中間轉換差 32
// 法一、字串是否為小寫:判斷ASCII CODE 是否介於97~122
// 法二、字串直接比大小,比的是字典序
/* 小寫轉大寫、ASCII code-32
String.fromCharCode(parameter) parameter為 ASCII code
string.charCodeAt(index) 我要知道 string[index] 的charCode 是多少
*/
let str = "Hi"
let ans = ""
for(let i=0 ; i<str.length ; i++){
let code = str.charCodeAt(i)
if(code >= 97 && code <= 122){
ans+=String.fromCharCode(code-32)
}
else{
ans+=str[i]
}
}
console.log(ans)
- 宣告字串與ans的初始值
- 迴圈從 0 開始
- i=0,獲得 str[0]=H 的 ASCII code (72)
- 判斷是否符合條件,不符合 => 進入else區塊,更改ans => ans="H"
- 下一圈迴圈,i=1,獲得 str[1]=i 的 ASCII code (105)
- 判斷是否符合條件,符合,ans + 變成大寫後的結果 => ans="HI"
- 下一圈迴圈,i=2,超出迴圈範圍,迴圈結束
- 印出 ans // ans="HI"
練習(3)- 刪除特定字元
不要想成刪除,想成略過
let str ="hello"
let deleted="l"
let ans=""
for(let i=0;i<str.length;i++){
if(str[i]!==deleted){
ans+=str[i]
}
}
console.log(ans)
- 宣告字串、要刪除的字、ans的初始值
- 迴圈從0開始
- i=0,判斷是否符合條件,符合,更改ans=> ans="h"
- 下一圈迴圈,i=1,判斷是否符合條件,符合,更改ans=> ans="he"
- 下一圈迴圈,i=2,判斷是否符合條件,不符合
- 下一圈迴圈,i=3,判斷是否符合條件,不符合
- 下一圈迴圈,i=4,判斷是否符合條件,符合,更改ans=> ans="heo"
- 下一圈迴圈,i=5,超出迴圈範圍,迴圈結束
- 印出 ans
作業(1)- 找次小值
let arr=[10,8,6]
let min1=Infinity //最小值
let min2=Infinity //次小值
for(let i=0;i<arr.length;i++){
if(arr[i]<min1){
min2=min1
min1=arr[i]
}
else if(arr[i]<min2){
min2=arr[i]
}
}
console.log(min1,min2) //6,8
- 宣告陣列並初始化最小值與次小值
- 迴圈從0開始
- i=0,判斷是否符合條件,是(arr[0]=10 < 最小值),將次小值更新成最小值,再將最小值更新成arr[0]=10, [目前:最小=10,次小=無窮大]
- 下一圈迴圈,i=1,判斷是否符合條件,是,將次小值更新成最小值,再將最小值更新成arr[1]=8, [目前:最小=8,次小=10]
- 下一圈迴圈,i=2,判斷是否符合條件,是,將次小值更新成最小值,再將最小值更新成arr[2]=6, [目前:最小=6,次小=8]
- 下一圈迴圈,i=3,超出迴圈範圍,迴圈結束
- 印出最小值與次小值
作業(2)- 大小寫互換
let str="hELLo"
let ans=""
for(let i=0;i<str.length;i++){
let code=str.charCodeAt(i)
if(code>=97&&code<=122){ //字母小寫的狀況
ans+=String.fromCharCode(code-32)
}
else if(code>=65&&code<=90){
ans+=String.fromCharCode(code+32)
}
else{
ans+=str[i]
}
}
console.log(ans)
- 初始化字串、初始化變數
- 迴圈從0開始
- i=0,獲得str[0]=h 的ASCII code (104)
- 判斷是否符合條件,是 (104 >= 97 且 104 =< 122),將其轉成大寫(ASCII code-32),更改ans => ans="H"
- 下一圈迴圈,i=1,獲得str[1]=E 的ASCII code (69)
- 判斷是否符合條件,否 (69 >= 97 且 69 =< 122),
- 判斷是否符合條件,是 (69 >=65 且 69 <= 90),將其轉成小寫(ASCII code+32) ,更改ans => ans="He"
- 重複執行迴圈,直到 i=5,超出迴圈範圍,迴圈結束
- 印出結果
作業(3)- 印出因數
let num=30
for(let i=1;i<=num;i++){
if(num%i===0){
console.log(i)
}
}
- 初始化數字
- 迴圈從1開始
- i=1,判斷條件是否符合條件,是(數字可以被i=1整除),將i印出來=>印出1
- 下一圈迴圈,i=2,判斷條件是否符合條件,是(數字可以被i=2整除),將i印出來=>印出2
- 下一圈迴圈,i=3,判斷條件是否符合條件,是(數字可以被i=3整除),將i印出來=>印出3
- 下一圈迴圈,i=4,判斷條件是否符合條件,否(數字不可以被i=3整除)
- 重複執行迴圈,直到 i=31,超出迴圈範圍,迴圈結束