鐵人賽
React
javascript
nodejs
vscode
鐵人賽第八天,我想先放緩腳步,讓各位好好消化一下前一週所學的React
,這幾天,我準備幾個javascript
的章節,帶領大家認識一下javascript
的一些獨特用法,讓你的React
寫得更優雅。
開啟terminal
,輸入node
,就可以快速操作nodeJS
囉!
Array
呼叫,你可以let a = [100,200,300];
console.log(a[0]+100);
>200
pop
及push
來操控他let a = new Array();
a.push(100);
a.push(999);
console.log(a); // output [100,999]
console.log(a.pop()); //output 999
Array
中的所有參數> ['coke', 'juice', 'water'].forEach((val, idx, array)=>
console.log(
'val:' ,val,
'idx:' ,idx,
'array:',array)
);
val: coke idx: 0 array: [ 'coke', 'juice', 'water' ]
val: juice idx: 1 array: [ 'coke', 'juice', 'water' ]
val: water idx: 2 array: [ 'coke', 'juice', 'water' ]
Array
中的所有參數~ (疑? 跟forEach有什麼差別??)
> ['coke', 'juice', 'water'].map((val, idx, array)=>
console.log(
'val:' ,val,
'idx:' ,idx,
'array:',array)
);
val: coke idx: 0 array: [ 'coke', 'juice', 'water' ]
val: juice idx: 1 array: [ 'coke', 'juice', 'water' ]
val: water idx: 2 array: [ 'coke', 'juice', 'water' ]
// forEach範例: 不會回傳值而改變原本的Array
> table=['coke', 'juice', 'water'];
> table = table.forEach((val, idx, array)=>`${idx}_`+val);
> console.log(table);
undefined //<-- forEach不會回傳值
// map範例: 會自動組裝return值,並完整交給接收的table
> table=['coke', 'juice', 'water']
> table = table.map((val, idx, array)=>`${idx}_`+val)
> console.log(table1)
[ '0_coke', '1_juice', '2_water' ] //<-- map
forEach
Array
~不用懷疑,用map
就對了map
的認知,效能是凌駕於forEach
,不過這篇倒是有不一樣的看法,說明如下圖。
- 根據他的實驗,
map
及forEach
都有表現不錯的時候,有趣的是,這些都比傳統的for
還慢 XD
reduce
是我覺得Array
函式最有趣的一個,記得當時剛看到別人用這樣的寫法,還一時摸不著頭緒,不過,其實也很簡單啦。
[Your_Array].reduce( func, init_val)
- ex:
let a = [3,5,7,6,2];
let reduceFunc = (accum, val)=>accum+val
let result = a.reduce(reduceFunc, 0); // result=23
initVal
設定為0
,然後執行reduceFunc
開始遍歷Array a
中的每個元素,依序累加,每加一次,就會把結果塞給accum
,拆解如下
loop | accum | val | return |
---|---|---|---|
0 | 0 | 3 | 3 |
1 | 3 | 5 | 8 |
2 | 8 | 7 | 15 |
3 | 15 | 6 | 21 |
4 | 21 | 2 | 23 |
reduce
學起來,對後面我們將各元件操作state func
匯集起來,相當有用!先賣個關子囉!>let numList = [0,1,2,3,4,5];
>numList.slice(0,3);
[ 0, 1, 2 ]
python
的時候,只要下這些指令,就可以直接使用一個連續數字的Array,敲便利der!!for i in range(5):
print(i) //印出 0,1,2,3,4
JS
也有,不過寫法顯得有些醜,還需要導入** Array解構(後面章節會說) **,不過,學起來吧!> numList = [... Array(5)].map((v, idx)=>idx)
[ 0, 1, 2, 3, 4 ]
JS
的Array
,也知道他隨著改版不斷精進,善用這些方法,可以讓你寫React
時,有更清楚的結構化;能讓自己帥一點,不學嗎~?