Professional Documents
Culture Documents
GoogleAppsScript Fundamental
GoogleAppsScript Fundamental
2021 (พพิมพพ์ครรรั้งททที่ 4)
พพิมพพ์ครรรั้งททที่ 1 : 12 พ.ย. 2019
พพิมพพ์ครรรั้งททที่ 2 : 1 ธ.ค. 2019
พพิมพพ์ครรรั้งททที่ 3 : 2 เม.ย. 2020
พพิมพพ์ครรรั้งททที่ 4 : 15 ก.พ. 2021
หลลักการเขขียนโปรแกรม
Google Apps Script
เรรียบเรรียงโดย
วสสันตต์ คคุณดดิลกเศวต
wasankds@gmail.com
Line ID : wasankds
08-1459-8343
www.poeclub.org
สารบลัญ
สารบลัญ...............................................................................4
คคานคา................................................................................14
บททขีที่ 1 Hello World..............................................................17
1.1. Google Apps Script แบบ Embbed Script และ Stand alone .......................18
1.1.ก.) แบบ Embbed Script (ฝฝังอยยยู่ในไฟลล) (18)
1.1.ข.) แบบ Stand alone (ไฟลลโดด) (19)
1.2. โคค้ดแรก และ คทยพ์ลรดททที่สสสำครญในกสำรเขทยนโคค้ด ...........................................................20
1.2.ก.) โคค้ดแรก (20)
1.2.ข.) คอมเมค้นตล (20)
1.2.ค.) คคียลลลัด (21)
1.2.ง.) รลันโคค้ด (22)
1.2.จ.) เปปิดดย Logs (23)
1.2.ฉ.) Logs - Chrome V8 (23)
1.2.ช.) Logs – New IDE (24)
1.3. Apps Script Dashboard .................................................................................... 25
บททขีที่ 2 ตลัวแปร และ โอเปอรร์เรเตอรร์..........................................27
2.1. Variables และ Data Types ................................................................................ 28
2.2. Operators ............................................................................................................ 29
2.2.ก.) Arithmetic Operators (สสสำหรลับตลัวเลข) (29)
2.2.ข.) Assignment operators(30)
2.2.ค.) String operators (30)
2.2.ง.) Comparison operators (31)
2.2.จ.) Logical Operators (31)
2.2.ฉ.) in (32)
2.2.ช.) Ternary Operator (ประกสำศตลัวแปรตสำมเงงงื่อนไข) (33)
2.2.ซ.) ใชค้ || และ && ประกสำศตลัวแปรตสำมเงงงื่อนไข (33)
2.3. Backticks – Chrome V8 ..................................................................................... 34
2.3.ก.) ใชค้ตลัวแปรใน Backticks (34)
2.3.ข.) พพิมพลอลักขระพพิเศษใน Backticks (34)
2.4. Use Strict – Chrome V8 .................................................................................... 35
2.5. Bitwise Operators ............................................................................................... 36
บททขีที่ 3 var, let และ const (Chrome V8)...................................37
3.1. let และ var ........................................................................................................... 38
3.1.ก.) Global Scope (38)
3.1.ข.) Function Scope (38)
3.1.ค.) Block Scope (39)
3.1.ง.) Redeclaring Variables (ประกสำศตลัวแปรซสซสำ) (39)
3.1.จ.) Loop Scope (40)
3.2. Global Variables in HTML ................................................................................ 40
3.2.ก.) ตลัวแปร Global scope ทคีงื่ประกสำศดค้วย var เปป็นของ Window object (40)
3.2.ข.) ตลัวแปร Global scope ทคีงื่ประกสำศดค้วย let ไมยู่ไดค้เปป็นของ Window object (41)
3.3. กสำรประกสำศตรวแปรซสรั้สำ ............................................................................................ 42
3.4. Hoisting ................................................................................................................ 43
3.5. const ..................................................................................................................... 44
3.5.ก.) Block Scope (44)
3.5.ข.) Assigned when Declared (44)
3.6. เปลทที่ยนไดค้ หรรือไมม่ไดค้ ................................................................................................ 44
3.6.ก.) Not Real Constants (44)
3.6.ข.) Primitive Values (45)
3.6.ค.) Constant Objects can Change (45)
3.6.ง.) Constant Arrays can Change (45)
3.7. Redeclaring (const) ........................................................................................... 46
บททขีที่ 4 ฟฟังกร์ชลัที่น....................................................................47
4.1. ฟฟังกพ์ชรที่น (Functions) ............................................................................................. 48
4.1.ก.) โครงสรค้สำงของฟฝังกลชลังื่น (48)
4.1.ข.) Globally declared และ Locally declared (48)
4.1.ค.) ตลัวอยยู่สำง – ฟฝังกลชลังื่นทคีงื่มคีกสำรสยู่งผยู่สำน Agruments 2 ตลัว (49)
4.1.ง.) ตลัวอยยู่สำง - เรคียกใชค้ฟฝังกลชลังื่นองงื่น จสำกอคีกฟฝังกลชลังื่น (49)
4.1.จ.) ตลัวอยยู่สำง – เกก็บฟฝังกลชลังื่นไวค้ในตลัวแปร (49)
4.1.ฉ.) ตลัวอยยู่สำง – Agruments ทคีงื่เปป็นฟฝังกลชลังื่น (50)
4.1.ช.) สรค้สำงฟฝังกลชลังื่นไวค้ใชค้งสำนใน Google Sheet (50)
4.1.ซ.) ทสสำใหค้เรคียกใชค้งสำนไดค้เหมงอนกลับฟฝังกลชลังื่น Built-in (51)
4.1.ฌ.) โคค้ดแบบ Global declared (51)
4.1.ญ.) Global variable เกก็บคยู่สำจสำกกสำรรลันไวค้หรงอไมยู่ ? (52)
4.2. Arrow function - Chrome V8 ........................................................................... 53
4.3. ฟฟังกพ์ชรที่น Generator ............................................................................................... 54
4.4. Default parameters – Chrome V8 ..................................................................55
4.5. วรตถถุ Arguments ................................................................................................... 55
บททขีที่ 5 คคาเฉพาะ..................................................................57
5.1. undefined ........................................................................................................... 58
5.2. null ....................................................................................................................... 58
5.3. this ........................................................................................................................ 59
5.4. infinity .................................................................................................................. 59
5.5. continue .............................................................................................................. 60
5.6. break .................................................................................................................... 62
บททขีที่ 6 ตลัวแปรวลัตถถ...............................................................65
6.1. ตรวแปร Object (วรตถถุ) ........................................................................................... 66
6.2. เพพิที่ม, ลบ, แทรก สมสำชพิกใหค้ Object ........................................................................ 67
6.3. get, set และ Object method - Chrome V8 ...................................................68
6.3.ก.) get และ function ใน Object (68)
6.3.ข.) set (69)
6.3.ค.) Object.defineProperty() (69)
6.4. Object Constructors - Chrome V8 .................................................................70
6.4.ก.) Object Types (Blueprints) (Classes) (70)
6.5. Object Prototypes - Chrome V8 - ยค้สำย ..........................................................71
6.6. Classes - Chrome V8 - ยค้สำย ............................................................................... 72
6.6.ก.) Classes (72)
6.6.ข.) The Constructor Method (72)
6.6.ค.) Class Methods (73)
6.7. Class Inheritance หรรือ Child classes ..............................................................74
6.7.ก.) Class Inheritance (74)
6.7.ข.) Getters and Setters (75)
6.7.ค.) Hoisting (76)
6.8. เมถอด static ......................................................................................................... 77
6.9. Object destructuring – Chrome V8 *** ........................................................79
บททขีที่ 7 วลัตถถ Object..............................................................83
7.1. assign() ................................................................................................................. 84
7.2. create() ................................................................................................................ 84
7.3. defineProperty() ................................................................................................ 87
7.4. Descriptors .......................................................................................................... 88
7.5. defineProperties() ............................................................................................. 89
7.6. entries() ............................................................................................................... 89
7.7. fromEntries() ....................................................................................................... 90
7.8. freeze() ................................................................................................................ 91
7.9. isFrozen() ............................................................................................................. 91
7.10. seal() .................................................................................................................. 92
7.11. isSealed() ........................................................................................................... 93
7.12. is() ....................................................................................................................... 93
7.13. isExtensible() .................................................................................................... 94
7.14. preventExtensions() ........................................................................................ 95
7.15. keys() *** .......................................................................................................... 96
7.16. values() *** ....................................................................................................... 97
7.17. getOwnPropertyDescriptor() .........................................................................97
7.18. getOwnPropertyDescriptors() ........................................................................ 99
7.19. getOwnPropertyNames() ................................................................................ 99
7.20. getOwnPropertySymbols() ..........................................................................100
7.21. getPrototypeOf() ........................................................................................... 101
บททขีที่ 8 วลัตถถนน่าสนใจ............................................................103
8.1. วรตถถุ Set ............................................................................................................... 104
8.2. วรตถถุ WeakSet ..................................................................................................... 104
8.3. วรตถถุ Map ............................................................................................................ 105
8.4. วรตถถุ WeakMap ................................................................................................... 107
8.5. วรตถถุ Symbol ...................................................................................................... 107
บททขีที่ 9 เทคนนิคตลัวแปรวลัตถถ....................................................109
9.1. จรบ Key จสำก Value แบบททที่ 1 ............................................................................. 110
9.2. จรบ Key จสำก Value แบบททที่ 2 สรค้สำงเปป็นเมถอด ...................................................111
9.3. กรองตรวแปรวรตถถุททที่ซสรั้สำ ........................................................................................... 112
9.4. กรองตรวแปรวรตถถุททที่ซสรั้สำ โดยใชค้ 1 คทยพ์ .......................................................................113
9.5. กรองตรวแปรวรตถถุททที่ซสรั้สำ โดยใชค้ 1 คทยพ์ - Map ...........................................................114
9.6. กรองวรตถถุตสำมคทยพ์ททที่ระบถุ ......................................................................................... 114
บททขีที่ 10 เงงที่อนไขและลลูป.......................................................117
10.1. if – else if - else ............................................................................................. 118
10.1.ก.) รยปแบบของ if (118)
10.1.ข.) รยปแบบของ if – else (118)
10.1.ค.) รยปแบบของ if – else if - else(119)
10.2. switch ............................................................................................................... 119
10.3. for ..................................................................................................................... 120
10.4. for in ................................................................................................................ 122
10.5. for of ................................................................................................................ 124
10.6. while ................................................................................................................. 125
10.7. do while .......................................................................................................... 125
10.8. try catch throw finally ................................................................................. 126
10.8.ก.) try และ catch (126)
ผล (127)
10.8.ข.) throw (127)
10.8.ค.) finally (128)
บททขีที่ 11 อาเรยร์..................................................................131
11.1. อสำเรยพ์ครืออะไร ..................................................................................................... 132
11.2. พรืรั้นฐสำนขค้อมมูลชนพิดอสำเรยพ์ .................................................................................... 132
11.3. อสำเรยพ์ 2 มพิตพิ ....................................................................................................... 132
11.3.ก.) กสำรเขคียนอสำเรยล 2 มพิตพิ (133)
11.3.ข.) กสำรเขค้สำถถึงสมสำชพิกในอสำเรยล 2 มพิตพิ (133)
11.3.ค.) กสำรนลับจสสำนวนสมสำชพิกในอสำเรยล (133)
11.4. Spread operator (3 จถุด) - Chrome V8 .......................................................134
11.5. Rest parameter – Chrome V8 .....................................................................135
11.6. Array destructuring – Chrome V8 ..............................................................136
บททขีที่ 12 อาเรยร์เมถอด.........................................................139
12.1. push() .............................................................................................................. 140
12.2. unshift() ........................................................................................................... 140
12.3. pop() ................................................................................................................ 141
12.4. shift() ............................................................................................................... 141
12.5. splice() ............................................................................................................. 142
12.6. slice() ............................................................................................................... 143
12.7. ตรวอยม่สำงกสำรใชค้งสำนอสำเรยพ์เมถอดกรบอสำเรยพ์ 2 มพิตพิ ..................................................144
12.8. join() ................................................................................................................. 144
12.9. concat() ........................................................................................................... 145
12.10. indexOf() *** ............................................................................................... 146
12.11. lastIndexOf() ................................................................................................ 147
12.12. reverse() ........................................................................................................ 148
12.13. includes() - Chrome V8 ............................................................................. 148
12.14. toString() ....................................................................................................... 149
12.15. keys() ............................................................................................................. 149
12.16. fill ................................................................................................................... 150
12.17. Array.from() .................................................................................................. 150
บททขีที่ 13 อาเรยร์เมถอด ตระกลูลวนลลูป........................................153
13.1. map() ............................................................................................................... 154
13.1.ก.) map() และ อสำเรยล 1 มพิตพิ (154)
13.1.ข.) map() และ อสำเรยล 2 มพิตพิ (155)
13.2. filter() ............................................................................................................... 157
13.2.ก.) ตลัวอยยู่สำงทคีงื่ 1 (157)
13.2.ข.) ตลัวอยยู่สำงทคีงื่ 2 – ใสยู่ฟฝังกลชลังื่นเปป็น Argrument (157)
13.2.ค.) ตลัวอยยู่สำงทคีงื่ 3 - กรองตลัวเลข (158)
13.2.ง.) ตลัวอยยู่สำงทคีงื่ 4 - กรองขค้อควสำม (158)
13.2.จ.) ตลัวอยยู่สำงทคีงื่ 5 – คค้นหสำในอสำเรยล (159)
13.3. sort() ................................................................................................................ 160
13.3.ก.) ขค้อมยลเปป็นตลัวเลขทลัซงหมด (160)
13.3.ข.) ขค้อมยลเปป็นขค้อควสำมทลัซงหมด (161)
13.3.ค.) ขค้อมยลผสม (163)
13.3.ง.) เรคียงขค้อมยลในอสำเรยล 2 มพิตพิ (165)
13.3.จ.) เรคียงโดยใชค้ 2 คคียล (หรงอมสำกกวยู่สำ) – ใชค้อสำเรยลอยยู่สำงเดคียว (166)
13.3.ฉ.) เรคียงโดยใชค้ 2 คคียล (หรงอมสำกกวยู่สำ) – ใชค้ Object ชยู่วย (167)
13.4. every() และ some() ....................................................................................... 168
13.4.ก.) ตลัวอยยู่สำงทคีงื่ 1 : อสำเรยล 1 มพิตพิ (169)
13.4.ข.) ตลัวอยยู่สำงทคีงื่ 2 : อสำเรยล 2 มพิตพิ (169)
13.4.ค.) ตลัวอยยู่สำงทคีงื่ 3 : ตลัวแปรวลัตถถ (170)
13.5. forEach() .......................................................................................................... 171
13.5.ก.) รยปแบบกสำรใชค้งสำน (171)
13.5.ข.) ตลัวอยยู่สำงทคีงื่ 1 : กสำรใชค้งสำนแบบ 1 Argrument (171)
13.5.ค.) ตลัวอยยู่สำงทคีงื่ 2 : กสำรใชค้งสำนแบบ 2 Argruments (172)
13.5.ง.) ตลัวอยยู่สำงทคีงื่ 3 : : กสำรใชค้งสำนแบบ 3 Argruments (172)
13.5.จ.) ตลัวอยยู่สำงทคีงื่ 4 : ตลัวอยยู่สำงองงื่นๆ (173)
13.6. reduce() ........................................................................................................... 173
13.6.ก.) รยปแบบกสำรใชค้งสำน (174)
13.6.ข.) ตลัวอยยู่สำงทคีงื่ 1 : รวมคยู่สำของสมสำชพิกในอสำเรยล (174)
13.6.ค.) ตลัวอยยู่สำงทคีงื่ 2 : ลดมพิตพิของอสำเรยล (175)
13.6.ง.) ตลัวอยยู่สำงทคีงื่ 3 : หสำคยู่สำเฉลคีงื่ยของสมสำชพิกในอสำเรยล (175)
13.6.จ.) ตลัวอยยู่สำงทคีงื่ 4 : หสำตลัวซสซสำ และจสสำนวนกสำรซสซสำ (176)
13.6.ฉ.) ตลัวอยยู่สำงทคีงื่ 5 : หสำจสสำนวนตลัวซสซสำ และจสสำนวนกสำรซสซสำ (2) (178)
13.6.ช.) ตลัวอยยู่สำงทคีงื่ 6 : หสำผลรวมเปป็นกลถยู่มๆ (178)
วสลันตล คถณดพิลกเศวต
wasankds@gmail.com
081-459-8343
Line ID : wasankds
บททขีที่ 1
Hello World
1.1. Google Apps Script แบบ Embbed Script และ Stand alone
โปรเจก็ค Google Apps Script มคี 2 ลลักษณะใหญยู่ๆ กก็คงอ แบบ Embbed Script(แบบฝฟังอยมูม่ในไฟลพ์)
และ แบบ Stand alone(แบบไฟลพ์โดด)
สสสำหรลับ IDE ตตัวใหมยู่ หรงอ Googl Apps Script Editor ตตัวใหมยู่ (เรรริ่มใชช้ ม.ค. 2021) กก็คงอ ตลัวแอพทคีงื่ใชค้
เขคียนโปรแกรม Google Apps Script มคีหนค้สำตสำดลังนคีซ
( หากตต้องการกลลับไปใชต้ Editor ตลัวเกก่า ใหต้คลลิกททที่ปปปุ่ม Use legacy editor )
เรสำสสำมสำรถสรค้สำง Google Apps Script แบบ Stand alone ไดค้ทคีงื่ Google Drive
โดย ทคีงื่หนค้สำแรก Google Drive ไปทคีงื่ New → More → Google Apps Script (ตสำมภสำพถลัดไป) จะ
เปป็นกสำรสรค้สำงโปรเจก็คและไฟลล Google Apps Script ขถึซนมสำ
โปรเจก็ค Google Apps Script แบบนคีซ สสำมสำรถมองเหก็นเปป็นไฟลลใน Google Drive ดค้วยเหตถนคีซจถึงเรคียกวยู่สำ
Stand alone (ไฟลลโดด)
หมสำยเหตถุสสสำครญ !!!
หสำกเมนย New → More → Google Apps Script ไมยู่มคี ใหค้เรสำเชงงื่อมตยู่อ Google Drive กลับแอพ Google
Apps Script กยู่อน โดย ...
ทคีงื่หนค้สำแรก Google Drive ไปทคีงื่เมนย New → More → Connection more apps จะปรสำกฎหนค้สำตยู่สำง(ตสำม
ภสำพ) ใหค้คค้นหสำดค้วยคสสำวยู่สำ apps script จะพบแอพทคีงื่ชงงื่อ Google Apps Script (ตสำมภสำพ) จสำกนลัซนใหค้คลพิกทคีงื่
Connect เพงงื่อเชงงื่อมตยู่อกลับแอพดลังกลยู่สำว
เขคียนโคค้ดดลังตยู่อไปนคีซ
function myFunction(){
Logger.log(“Hellow, World !!!”) ;
// ใชช้ console.log() เหมมือน Javascript ไดช้แลช้ว
console.log(“Hellow, World !!!”) ;
}
1.2.ข.) คอมเมค้นตล
<Enter> = ขถึซนบรรทลัดใหมยู่
<Ctrl><Shift><Enter> = เพพิงื่มบรรทลัดใหมยู่ไวค้กยู่อนหนค้สำบรรทลัดปฝัจจถบลัน
<Ctrl><F> = คค้นหสำ
<Ctrl><H> = คค้นหสำและแทนทคีงื่
( เมงงื่อไดค้ผลกสำรคค้นหสำแลค้ว )
<Enter> = โดดไปยลังคสสำทคีงื่คค้นหสำตลัวถลัดไป (เคอรลเซอรลตค้องอยยยู่ทคีงื่ Search Box)
<Shift><Enter> = โดดไปยลังคสสำทคีงื่คค้นหสำตลัวกยู่อนหนค้สำ (เคอรลเซอรลตค้องอยยทยู่ คีงื่ Search Box)
หรงอจะดย Logs ทคีงื่ Stackdriver logging กก็ไดค้ โดยไปทคีงื่เมนย View → Stackdriver logging จะปรสำกฎ
หนค้สำตสำมภสำพ
New IDE ตลัวใหมยู่ ของ Google Apps Script เมงงื่อรลันสครพิปตลหนค้สำตยู่สำง Execution Log จะปรสำกฎเลย
กรณคีตค้องกสำรดยหนค้สำรวม Logs ใหค้คลพิกทคีงื่ปถุปุ่ม (Execution Log)
2.2. Operators
JavaScript Operators
https://www.w3schools.com/js/js_operators.asp
function mathOperators() {
var a = 10 ;
var b = 2 ;
// โอเปอรต์เรเตอรต์พมืนี้นฐาน ============================================
Logger.log(a+b) ; // พรมพต์ : 12.0
Logger.log(a-b) ; // พรมพต์ : 8.0
Logger.log(a*b) ; // พรมพต์ : 20.0
Logger.log(a/b) ; // พรมพต์ : 5.0
Logger.log(a**b) ; // พรมพต์ : 100 ( 10 ยกกกาลลัง 2 ) - ใชช้ไดช้แลช้วใน Chrome V8
// หารเอาเศษ ============================================
Logger.log(a%b) ; // พรมพต์ : 0
Logger.log(5%2) ; // พรมพต์ : 1.0
Logger.log(1%0) ; // พรมพต์ : NaN
// ยกกกาลลัง ============================================
// Math object ( ดบูเพรริ่มเตรมขช้อ บททขีริ่ 16 รบูช้จลักกลับ Google Services หนช้า 203 )
var c = Math.pow(a, b) ;
Logger.log(c) ;
ดยกสำรลยปแตยู่ละครลัซง ตสำมตสำรสำงตยู่อไปนคีซ
ลยป i x y x w
1 1 2 49 5 100
2 2 4 47 10 50
3 3 7 44 30 16.6666668
4 4 11 40 120 4.16666667
function comparisonOperators(){
var a=10 ; // Number
var b='10' ; // Text – เปป็นขช้อความ แตค่หนช้าตาเปป็นตลัวเลข
Logger.log(a) ; // พรมพต์ : 10.0
Logger.log(typeof a) ; // พรมพต์ : number
Logger.log(b) ; // พรมพต์ : 10
Logger.log(typeof b) ; // พรมพต์ : string
// 1. Single = : เครมืริ่องหมาย = อลันเดขียว เอาคค่าจากขวาไปใสค่ซช้าย
a = b;
Logger.log(a) ;
Logger.log(typeof a) ;
// 2. Double == : เปรขียบเทขียบเฉพาะคค่า
Logger.log(a==b) ; // พรมพต์ : true - แมช้ชนรดขช้อมบูลไมค่ตรงกลัน
// 3. Triple === : เปรขียบเทขียบคค่าและชนรดขช้อมบูล
Logger.log(a===b) ; // พรมพต์ : false - ตรวจสอบทลันี้งคค่าและชนรดของขช้อมบูล
// 4. Not equal != : เปรขียบเทขียบเฉพาะคค่า
Logger.log(a != b) ; // พรมพต์ : false - เพราะ คค่าตรงกลัน
// 5. Not equal !== : เปรขียบเทขียบทลันี้งคค่าและชนรด
Logger.log(a !== b) ; // พรมพต์ : true - เพราะ ชนรดขช้อมบูล ไมค่ตรงกลัน
// 6. Greater than, Less than operators
var c=50 ;
var d=100 ;
Logger.log(c>d); // พรมพต์ : false
Logger.log(c>=d); // พรมพต์ : false
Logger.log(c<d); // พรมพต์ : true
Logger.log(c<=d); // พรมพต์ : true
}
ตรวอยม่สำงททที่ 2
function myFunction2() {
var xxx = 62 ;
var yyy ; // ประกาศตลัวแปรแตค่ไมค่ไดช้กกาหดนคค่า - undefined
if(xxx) {
Logger.log(xxx) ; // 62
}
if(yyy) {
Logger.log(yyy) ;
}else{
Logger.log(typeof yyy) ; // undefined
}
} // End – function
2.2.ฉ.) in
The in Operator
https://www.w3schools.com/jsref/jsref_operators.asp
in จะคงนคยู่สำกลลับมสำเปป็น true ถค้สำคถณสมบลัตพิหรงอคคีย(ล Property/Key)ทคีงื่ระบถ มคีในอก๊อบเจก็กตล กรณคีเปป็นอก๊อบ
เจก็กตล ระบถโดยใชค้คคียล กรณคีเปป็นอสำเรยล ระบถโดยใชค้ดรรนคีลสสำดลับ(ใชค้คถณสบลัตพิ length กก็ไดค้) ตรวอยม่สำง
// Arrays
var cars = ["Saab", "Volvo", "BMW"] ;
"Saab" in cars // false (specify the index number instead of value)
0 in cars // true
1 in cars // true
4 in cars // false (does not exist)
"length" in cars // true (length is an Array property)
// Objects
var person = {firstName:"John", lastName:"Doe", age:50} ;
"firstName" in person // true
"age" in person // true
// Predefined objects - วลัตถคุทขีริ่มอขี ยบูค่แลช้วในระบบ
"PI" in Math // true
"NaN" in Number // true
"length" in String // true
ถค้สำเงงงื่อนไขเปป็น true ตลัวแปร จะเกก็บคยู่สำ value1 แตยู่ถค้สำเปป็น false จะเกก็บคยู่สำ value2 ไวค้
ตรวอยม่สำง
var voteable, age = 19 ;
ar voteable = (age < 18) ? "Too young" : "Old enough" ;
Logger.log(voteable) ; // พรมพต์ : Old enough
ตรวอยม่สำง
var msg = 0 ;
var newMsgTxt = "You have " + msg + " messages." ;
var noNewMsgText = "Sorry, you have no new messages." ;
Logger.log(( msg && newMsgTxt) || noNewMsgText) ;
ผล – ถค้สำ msg = 0 ;
Sorry, you have no new messages.
ผล – ถค้สำ msg = 1 ;
You have 1 messages.
คยู่สำทคีงื่เปป็นสตรพิงนอกจสำกใชค้ ' ' หรรอ " " ครอบสตรพิงแลค้ว เรสำสสำมสำรถใชค้ Backticks หรงอ Grave accent
หรงอ เครรืที่องหมสำย ` ` ครอบไดค้ดค้วย แตยู่มคีควสำมพพิเศษในกสำรใชค้งสำนมสำกกวยู่สำ
หมสำยเหตถุ
Backticks ตค้องใชค้ปถปุ่มตลัวหนอนในกสำรพพิมพล ซถึงื่งใครทคีใงื่ ชค้ทสสำเปป็นปถปุ่มสลลับภสำษสำไปแลค้วจะพพิมพลไมยู่ไดค้ วพิธคีแกค้
- สสสำหรลับ Windows กด <Alt><96> (ไมยู่ไดค้ทดสอบใน Windows ถค้สำไมยู่ไดค้ขออภลัยดค้วย)
- สสสำหรลับ Linux <Ctrl><Shift><U> + <60> + <Enter> (ใชค้แปป้นพพิมพลภสำษสำอลังกฤษ)
ดบูเพรริ่มเตรม - https://www.fileformat.info/info/unicode/char/0060/index.htm
https://en.wikipedia.org/wiki/List_of_Unicode_characters
Logs
[ 01 ] <p>My name is Wasan,</p>
<p>I am 43 ! years old</p>
[ 02 ] <p>My name is Wasan,</p>
<p>I am 43 ! years old</p>
ตรวอยม่สำง
"use strict" ;
x = 3.14 ; // Error เพราะ x ไมค่ไดช้ประกาศ
"use strict";
ตรวอยม่สำง
myFunction() ;
function myFunction() {
y = 3.14 ; // Error เพราะ y ไมค่ไดช้ประกาศ
}
x = 3.14 ; // OK - x ใชช้งานไดช้
myFunction() ;
function myFunction() {
"use strict" ;
y = 3.14 ; // Error เพราะ y ไมค่ไดช้ประกาศ
}
ตลัวอยยู่สำง
var x = 2
Logger.log("X1 : " + x )
function test() {
var x = 20 ;
Logger.log("X2 : " + x )
}
Logger.log("X3 : " + x)
{
var x = 2 ;
}
// x สามารถใชช้ทขีริ่นขีริ่ไดช้
{
let x = 2 ;
}
// x ไมค่สามารถใชช้ทขีริ่นขีริ่ไดช้
function ftest() {
var x = 10 ;
// ตรงนขีนี้ x กก็คอมื 10
{
var x = 2 ;
// ตรงนขีนี้ x กก็คอมื 2
}
// ตรงนขีนี้ x กก็คอมื 2
}
var i = 5 ;
for (var i = 0 ; i < 10 ; i++) { // ประกาศซกนี้า – assign คค่าใหมค่
// โคช้ด
}
// ตรงนขีนี้ i กก็คมือ 10
var i = 5 ;
for (let i = 0 ; i < 10 ; i++) { // ประกาศซกนี้า - คนละตลัว
// โคช้ด
}
// ตรงนขีนี้ i กก็คมือ 5 – เพราะ i ทขีนริ่ กาไปวนลบูป เปป็นคนละตลัวกลับทขีริ่ประกาศดช้วย var
3.2.ก.) ตตัวแปร Global scope ททปที่ ระกาศดค้วย var เปป็นของ Window object
ตลัวอยยู่สำง
var carName = "Volvo";
// โคช้ดตรงนขีนี้สามารถใชช้ window.carName
ผล
3.2.ข.) ตตัวแปร Global scope ททปที่ ระกาศดค้วย let ไมยู่ไดค้เปป็นของ Window object
ตลัวอยยู่สำง
<body>
<h2>JavaScript Global Variables</h2>
<p>In HTML, global variables defined with <b>let</b>, will not become window variables.
</p>
<p id="demo"></p>
<script>
let carName = "Volvo";
// code here can use window.carName
document.getElementById("demo").innerHTML = "I can not display " + window.carName ;
</script>
</body>
3.3. กสำรประกสำศตลัวแปรซสซสำ
กสำรประกสำศตลัวแปรซสซสำดค้วย var ทสสำไดค้ทกถ ทคีงื่ในโปรแกรม
var x = 2 ;
// x กก็คมือ 2
var x = 3 ;
// ตอนนขีนี้ x กก็คอมื 3 – ตอนนขีนี้ประกาศแบบนขีนี้ไมค่ไดช้แลช้ว Error กก็คอมื x ประกาศไปแลช้ว ประกาศซกนี้าไมค่ไดช้
3.4. Hoisting
ผล
const PI = 3.141592653589793 ;
PI = 3.14 ; // Error
PI = PI + 10 ; // Error เชค่นเดขียวกลัน
var x = 10 ;
// ตรงนขีนี้ x กก็คอมื 10
{
const x = 2 ;
// ตรงนขีนี้ x กก็คอมื 2
}
// ตรงนขีนี้ x กก็คอมื 10
// ผรด
const PI ;
PI = 3.14159265359 ;
// ถบูก
const PI = 3.14159265359 ;
const PI = 3.141592653589793 ;
PI = 3.14 ;
PI = PI + 10 ;
Logger.log(PI) // 3.141592653589793 – ยลังคงเปป็นคค่าแรก
// ถช้าเปป็น Javascript Error ไปแลช้ว
กสำรประกสำศตลัวแปรซสซสำกลับตลัวแปรทคีงื่ประกสำศดค้วย var หรงอ let ดค้วย const ภสำยใน Scope เดคียวกลัน ไมม่
สสำมสำรถทสสำไดค้
var x = 2 ; // Allowed
const x = 2 ; // Not allowed
{
let x = 2 ; // Allowed
const x = 2 ; // Not allowed
}
const x = 2 ; // Allowed
const x = 3 ; // Not allowed
x=3; // Not allowed
var x = 3 ; // Not allowed
let x = 3 ; // Not allowed
{
const x = 2 ; // Allowed
const x = 3 ; // Not allowed
x=3; // Not allowed
var x = 3 ; // Not allowed
let x = 3 ; // Not allowed
}
const x = 2 ; // Allowed
{
const x = 3 ; // Allowed
}
{
const x = 4 ; // Allowed
}
4.1.ก.) โครงสรค้างของฟฝังกลชตัที่น
Argrument (ตตัวแลกเปลทที่ยน) เปป็นวลัตถถดพิบทคีงื่เรสำตค้องสยู่งไปใหค้ฟฝังกลชลังื่นประมวลผล
บททขีริ่ 4 : ฟฟังกต์ชลัริ่น 47
4.1.ฉ.) ตตัวอยยู่าง – Agruments ททที่เปป็นฟฝังกลชตัที่น
function mulByX(x,y) {
return x*y ;
}
=mulByX(5,8)
บททขีริ่ 4 : ฟฟังกต์ชลัริ่น 49
เมงงื่อรลันฟฝังกลชลังื่น testGlobDeclared() จะไดค้ผลดลังนคีซ
ผล - โคค้ดแบบ Global declared ทสสำงสำนเลย แมค้จะไมม่ไดค้อยมูม่ในฟฟังกพ์ชรที่นททที่ถมูกเรทยกใชค้งสำน และถถึงแมค้จะ
ยค้สำยโคค้ดแบบ Global declared ไปไวค้ในไฟลล .gs ไฟลลองงื่น ไมยู่ไดค้อยยยู่ในไฟลลเดคียวกลันกลับฟฝังกลชลังื่นทคีงื่ถยกเรคียกรลัน กก็จะใหค้
ผลแบบเดคียวกลัน
Logs
[ 01 ] 15.0
[ 02 ] 20.0
[ 03 ] 35.0
[ 04 ] null
[ 05 ] 10.0
4.1.ญ.) Global variable เกล็บคยู่าจากการรตันไวค้หรรอไมยู่ ?
ตยู่อจสำกขค้อกยู่อนหนค้สำ เมงงื่อรลันฟฝังกลชลังื่น testGlobDeclared() ไปแลค้ว d เกก็บคยู่สำ 10 ไวค้ มสำดยตยู่อวยู่สำ ถค้สำรลัน
ฟฝังกลชลังื่นอคีกตลัว กก็คอง afterTestGlobDeclared() ทคีงื่อสำค้ งอพิงตลัวแปร d จะไดค้ผลเปป็นอยยู่สำงไร d จะเกก็บคยู่สำ 10 ไวค้อยยยู่
หรงอเปลยู่สำ
var a = 15 ;
var b = 20 ;
var c = a + b ;
var d ;
Logger.log(a) ; // ดบูผลทขีริ่ Logs ------------ > [ 01 ] - 15.0
Logger.log(b) ; // ดบูผลทขีริ่ Logs ------------ > [ 02 ] - 20.0
Logger.log(c) ; // ดบูผลทขีริ่ Logs ------------ > [ 03 ] - 35.0
Logger.log(d) ; // ดบูผลทขีริ่ Logs ------------ > [ 04 ] - null
function testGlobDeclared(){
d = 10 ;
Logger.log(d) ;
}
function afterTestGlobDeclared(){
Logger.log(d) ; // ดบูผลทขีริ่ Logs ------------ > [ 05 ] - null
}
// แบบเดรม
function(arguments) {
// Code
}
// Chrome V8 หรมือ Javascript ES6
(arguments) => {
// Code
}
ตรวอยม่สำงททที่ 1
// แบบเดรม
var fn = function(){
// var fn = function func(){ // แบบนขีนี้กก็ไดช้
return "Val" ;
}
Logger.log(fn()) ; // Val
// Chrome V8 หรมือ Javascript ES6
const fn = () => "Val" // มขีคกาสลัริ่งเดขียวทขีริ่เปป็นของฟฟังกต์ชลัริ่น ไมค่ตช้องครอบดช้วย { } กก็ไดช้
// และจะ return ตลัวนลันี้นเลย จจึงไมค่ตช้องใชช้คกาสลัริ่ง return อขีก
Logger.log(fn()) // Val
บททขีริ่ 4 : ฟฟังกต์ชลัริ่น 51
ตรวอยม่สำง
// แบบเดรม
let arr = [ "A" , "B" , "C" ]
let newArr = arr.map(function(r){ return r + "-0" } )
Logger.log(newArr) // [ 'A-0', 'B-0', 'C-0' ]
// Chrome V8
let arr2 = [ "A" , "B" , "C" ]
let newArr2 = arr.map( (r) => { return r+"-0" } ) // ใชช้ Arror function
Logger.log(newArr2) // [ 'A-0', 'B-0', 'C-0' ] - ใหช้ผลลลัพธต์แบบเดขียวกลัน
// Chrome V8 - ลดรบูป
let arr3 = [ "A" , "B" , "C" ]
let newArr3 = arr.map( r => r+"-0" ) // ใชช้ Arror function ลดรบูป
// Argrument มขีตลัวเดขียว ไมค่ตช้องมขีวงเลก็บกก็ไดช้
// return ไมค่ตช้องมขี หากคมืน 1 คกาสลัริ่ง
Logger.log(newArr3) // [ 'A-0', 'B-0', 'C-0' ] - ใหช้ผลลลัพธต์แบบเดขียวกลัน
// การเรขียกใชช้ฟฟังกต์ชลัริ่น Generator
function* gen(){ // หลลัง function มขี *
yield 1 ; // ใชช้คกาวค่า yield เทค่านลันี้น
yield 2 ;
yield 3 ;
}
// การเรขียกใชช้ฟฟังกต์ชลัริ่น Generator
function test(){
let n = gen() ; console.log(n) ; // -------------- > ดบูผลทขีริ่ Logs [01]
let a1 = n.next() ; console.log(a1) ; // -------------- > ดบูผลทขีริ่ Logs [02]
let a2 = n.next() ; console.log(a2) ; // -------------- > ดบูผลทขีริ่ Logs [03]
let a3 = n.next() ; console.log(a3) ; // -------------- > ดบูผลทขีริ่ Logs [04]
let a4 = n.next() ; console.log(a4) ; // -------------- > ดบูผลทขีริ่ Logs [05]
}
Logs
[ 01 ] {}
[ 02 ] { value: 1, done: false }
[ 03 ] { value: 2, done: false }
[ 04 ] { value: 3, done: false }
[ 05 ] { value: undefined, done: true }
function callFunc() {
let total_default = mult() ; // เรขียกใชช้ฟฟังกต์ชลัริ่น โดยไมค่สค่งพารามรเตอรต์ไปใหช้
console.log(total_default) ; // 1 – ใชช้คค่า Default
let total = mult(4,3) ;
console.log(total) ; // 12 – ใชช้คค่า 4x3
}
function mult(x=1 , y=1) {
return x*y
}
บททขีริ่ 4 : ฟฟังกต์ชลัริ่น 53
ผล
Logs
[ 01 ] 1
[ 02 ] 2
[ 03 ] 3
ตรวอยม่สำง - หสำผมรวมในกค้อนอสำเรยล
x = sumAll(1, 123, 500, 115, 44, 88) ;
Logger.log(x) ; // 871
function sumAll() {
var i ;
var sum = 0 ;
for (i = 0 ; i < arguments.length ; i++) {
sum += arguments[i] ;
}
return sum ;
}
ตรวอยม่สำง – หสำคยู่สำมสำกสถดในกค้อนอสำเรยล
x = findMax(1, 123, 500, 115, 44, 88) ; // 500
function findMax() {
var i ;
var max = -Infinity ; // คค่าทขีนริ่ ช้อยทขีริ่สดคุ
for (i = 0 ; i < arguments.length ; i++) {
if (arguments[i] > max) {
max = arguments[i] ;
}
}
return max ;
}
หมสำยเหตถุ :
กสำรหสำคยู่สำสยงสถดตสงื่สำสถด มคีวธพิ คีทคีงื่งยู่สำยกวยู่สำนคีซ เขคียนโคค้ดเพคียง 1 บรรทลัด
( ดผเพลิที่มเตลิมในขต้อ 11.4 Spread operator (3 จปด) - Chrome V8 หนต้า 128 )
var x ;
Logger.log(x) ; // พรมพต์ : undefined
if (typeof x === "undefined") {
txt = "x is undefined" ; // ทกาบรรทลัดนขีนี้
} else {
txt = "x is defined" ;
}
5.2. null
null คลค้สำยกลับ undefined ไมยู่มคีขค้อมยลเหมงอนกลัน แตยู่ตยู่สำงกลันทคีงื่ชนพิด
ตลัวอยยู่สำง
ตลัวอยยู่สำง
var person = {
firstName : "John" ,
lastName : "Doe" ,
age : 50 ,
eyeColor : "blue"
};
person = undefined ; // Now both value and type is undefined
var person = {
firstName : "John" ,
lastName : "Doe" ,
age : 50 ,
eyeColor : "blue"
};
person = null ; // Now value is null, but type is still an object
function call() {
Logger.log(inFunc()) ;
}
function inFunc() {
return this ;
}
5.4. infinity
JavaScript Infinity Property
https://www.w3schools.com/jsref/jsref_infinity.asp
Infinity หมสำยถถึงเลขบวกทคีงื่ไมยู่สพิซนสถด แตยู่จรพิงๆในทสำงคอมพพิวเตอรลแลค้ว จสสำกลัดทคีงื่
1.797693134862315E+308
- Infinity หมสำยถถึงคยู่สำเลขลบทคีงื่ไมยู่สพิซนสถด แตยู่จรพิงๆจสสำกลัดทคีงื่ -1.797693134862316E+308
บททขีริ่ 5 : คกาเฉพาะ 57
5.5. continue
JavaScript continue Statement
https://www.w3schools.com/jsref/jsref_continue.asp
JavaScript Break and Continue
https://www.w3schools.com/js/js_break.asp
รยปแบบกสำรใชค้งสำน
continue ;
หรงอใชค้กลับ Label
continue labelname ;
ตรวอยม่สำงททที่ 1
var text = ""; var i = 0 ;
while (i < 5) {
i++ ;
if (i === 3) {
continue ; // ขช้าม 3 ไป
} // if
text += "\nThe number is " + i ;
} // while
Logger.log(text) ; // ดบูผลทขีริ่ Logs ------------------------- >
ผล
Logs
[ 01 ] The number is 1
The number is 2
The number is 4
The number is 5
ผล
Logs
[ 01 ] 1
4
5
6
7
ตรวอยม่สำงททที่ 3
var cars = [ "BMW" , "Volvo" , "Saab" , "Ford" ] ;
var text = "" ;
var i ;
for (i = 0 ; i < cars.length ; i++) {
if (cars[i] === "Saab") { // ขช้าม Saab ไป
continue ;
}
text += cars[i] + "\n" ;
}
ผล
Logs
[ 01 ] BMW
Volvo
Ford
บททขีริ่ 5 : คกาเฉพาะ 59
ตรวอยม่สำงททที่ 4 – ใชค้ continue กลับ label
var i, j ;
var text = "" ;
Loop1: // The first for loop is labeled "Loop1"
for (i = 0 ; i < 3 ; i++) {
text += "\n" + "i = " + i + ", j = " ;
Loop2: // The second for loop is labeled "Loop2"
for (j = 10 ; j < 15 ; j++) {
if (j === 12) { // ขช้าม 12 ไป
continue Loop2 ;
}
text += j + " " ;
}
}
Logger.log(text) ;
ผล
Logs
i = 0, j = 10 11 13 14
i = 1, j = 10 11 13 14
i = 2, j = 10 11 13 14
5.6. break
JavaScript break Statement
https://www.w3schools.com/jsref/jsref_break.asp
break ใชค้โดดออกจสำก switch หรงอลยป (for, for ... in, while, do ... while)
เมงงื่อ break ถยกใชค้ใน switch จะหยถด switch ทลัซงบลก็อค
เมงงื่อ break ถยกใชค้ในลยป จะหยถดลยปและทสสำโคค้ดจสำกลยปตยู่อ(ถค้สำมคี)
break สสำมสำรถใชค้กลับ label ไดค้ดค้วย เพงงื่อโดดไปยลัง label ถค้สำไมยู่มคี label จะใชค้งสำน breake ไดค้เฉพสำะใน
switch หรงอ ลยปเทยู่สำนลัซน
รยปแบบกสำรใชค้งสำน
break ;
หรงอใชค้กลับ Label
break labelname ;
ผล
Logs
The number is 0
The number is 1
The number is 2
ตรวอยม่สำงททที่ 2
var day ;
switch (new Date().getDay()) { // ไดช้ตลัวเลขออกมาเปป็น 0-6
case 0:
day = "Sunday" ;
break ;
case 1:
day = "Monday" ;
break ;
case 2:
day = "Tuesday" ;
break ;
case 3:
day = "Wednesday" ;
break ;
case 4:
day = "Thursday" ;
break ;
case 5:
day = "Friday" ;
break ;
case 6:
day = "Saturday" ;
break ;
}
Logger.log("Today is " + day) ; // ผลเชค่น Today is Thursday
บททขีริ่ 5 : คกาเฉพาะ 61
ตลัวอยยู่สำงทคีงื่ 3 – ใชค้งสำน break นอก switch หรงอลยป
var cars = [ "BMW" , "Volvo" , "Saab" , "Ford" ] ;
var text = "" ;
list: {
text += cars[0] + "\n" ;
text += cars[1] + "\n" ;
text += cars[2] + "\n" ;
break list ;
text += cars[3] + "\n" ;
}
ผล
Logs
BMW
Volvo
Ford
ตลัวอยยู่สำงทคีงื่ 4
var text = "" ;
var i, j ;
Loop1: // The first for loop is labeled "Loop1"
for (i = 0 ; i < 3 ; i++) {
text += "\n" + "i = " + i + ", j = " ;
Loop2: // The second for loop is labeled "Loop2"
for (j = 10 ; j < 15 ; j++) {
if (j === 12) {
break Loop1 ;
}
text += j + " " ;
}
}
Logger.log(text) ;
ผล
i = 0, j = 0 1
ตตัวแปร Object ประกอบไปดค้วย keys(หรงอ Properties) และ values โดยทลัซง keys และ values เรสำ
เรคียกรวมกลันวยู่สำ items (ดยตลัวอยยู่สำงไดค้จสำกโคค้ดดค้สำนลยู่สำง)
Object สสำมสำรถมคีเมถอดไดค้ดค้วย (Chrome V8) โดยเมถอดของ Object กก็คงอ คถณสมบลัตพิทคีงื่บรรจถดวค้ ย
ฟฝังกลชลังื่น เวลสำเรคียกใชค้งสำนจถึงเรคียกใชค้แบบเมถอด(มคีวงเลก็บตยู่อทค้สำย) เชยู่น Object.Method()
ตลัวอยยู่สำงกสำรสรค้สำงตลัวแปรวลัตถถ และกสำรจลัดกสำรเบงซองตค้น
function objectFunction1() {
// ใชช้วงเลก็บปปีกกา ครอบคค่าของตลัวแปร Object
var newObj = {} ; // สรค้างตตัวแปร Object วยู่างๆ
// Object ประกอบไปดช้วย key : value หลายตลัว
// ลกาดลับของ key : value ไมค่สกาคลัญ
var employee = {
name : 'Joe Bloggs' , // key กก็คมือ name , value กก็คมือ 'Joe Bloggs'
age : 25 , // key กก็คมือ age , value กก็คมือ 25
title : 'Data Analyst' // key กก็คมือ title , value กก็คอมื 'Data Analyst'
name_title : function() { // เมถอด กก็คมือ name_title
return this.name + " " + this.title ;
} // Close - name_title
} // Close - employee
Logger.log(employee) ; // พรมพต์ : {name=Joe Bloggs, title=Data Analyst, age=25.0}
Logger.log(typeof employee) ; // พรมพต์ : object
Logger.log(employee.name) ; // เขช้าถจึงขช้อมบูลใน Object วรธขีทขีริ่ 1 – ผล Joe Bloggs
Logger.log(employee['name']) ; // เขช้าถจึงขช้อมบูลใน Object วรธขีทขีริ่ 2 – ผล Joe Bloggs
Logger.log(employee.name_title()) ; // เรขียกเมถอดใน name_title()
// พพิมพล : Joe Bloggs Data Analyst
delete employee.age // ลบคขียต์ age ในตลัวแปรวลัตถคุ employee
employee.age = 25 // เพรริ่มคขียต์ age ลงในตลัวแปรวลัตถคุ employee
}
function objectFunction2() {
var employee = {
name: 'Joe Bloggs',
age: 25,
title: 'Data Analyst'
}
// 2. ลบ item ======================================================
delete employee.age ;
Logger.log(employee) ;
// พรมพต์ : {name=Joe Bloggs, title=Data Analyst, department=Web Analytics}
}
บททขีริ่ 6 : ตลัวแปรวลัตถคุ 65
6.3. get, set และ Object method - Chrome V8
6.3.ค.) Object.defineProperty()
JavaScript Object Accessors - Object.defineProperty()
https://www.w3schools.com/js/js_object_accessors.asp
เมถอด Object.defineProperty() สสำมสำรถใชค้เพพิงื่ม get และ set ใหค้กลับตลัวแปรวลัตถถไดค้เชยู่นเดคียวกลัน
ตลัวอยยู่สำง
https://www.w3schools.com/js/tryit.asp?filename=tryjs_object_accessors_set4
// Define object
var obj = {counter : 0} ;
// Define setters
Object.defineProperty(obj, "reset", {
get : function() { this.counter = 0 ; }
});
Object.defineProperty(obj, "increment", {
get : function() { this.counter++ ; }
});
Object.defineProperty(obj, "decrement", {
get : function() { this.counter-- ; }
});
Object.defineProperty(obj, "add", {
set : function(value) { this.counter += value ; }
});
Object.defineProperty(obj, "subtract", {
set : function(value) { this.counter -= value ; }
}) ;
บททขีริ่ 6 : ตลัวแปรวลัตถคุ 67
// ตลัวอยค่างการใชช้งาน
obj.reset ;
obj.add = 5 ;
obj.subtract = 1 ;
obj.increment ;
obj.decrement ;
Logger.log(obj.counter) ; // ผล : 4
หมสำยเหตถุ :
Apps Script มคี Built-in objects(วลัตถถทคีงื่สรค้สำงไวค้แลค้วพรค้อมใหค้ใชค้งสำน) ดลังตยู่อไปนคีซ
ผล
Logs
[ 01 ] { jobtitle=Caveman, born=1970.0, name=Fred Flintstone, salary=2000.0 }
[ 02 ] { jobtitle=Instructor, born=1977.0, name=Wasan Kds, salary=2000.0 }
บททขีริ่ 6 : ตลัวแปรวลัตถคุ 69
6.6. Classes - Chrome V8
6.6.ก.) Classes
JavaScript Classes
https://www.w3schools.com/js/js_classes.asp
Classes หรงอ คลาส กก็คอง เปป็นกสำรสรค้สำงโครงสรค้สำงของวลัตถถทคีงื่มคีคถณสมบลัตพิและเมธอด
หมสำยเหตถุ
Javascript class ไมยู่ใชยู่วลัตถถ แตยู่เปป็นแมยู่แบบของวลัตถถ
class ClassName{
constructor() { ... }
}
class Car{
constructor(name, year) {
this.name = name ;
this.year = year ;
}
age() {
let date = new Date() ;
return date.getFullYear() - this.year ;
}
}
let myCar = new Car("Ford", 2014) ;
Logger.log("My car is " + myCar.age() + " years old.") ; // ผล : My car is 7 years old.
ตรวอยม่สำง – สยู่งพสำรสำมพิเตอรลใหค้กลับคลสำส
https://www.w3schools.com/js/tryit.asp?filename=tryjs_class_method2
class Car{
constructor(name, year) {
this.name = name ;
this.year = year ;
}
age(x) {
return x – this.year ;
}
}
let date = new Date() ;
let year = date.getFullYear() ;
let myCar = new Car("Ford", 2014) ;
Logger.log("My car is " + myCar.age(year) + " years old.") ; // ผล : My car is 7 years old.
บททขีริ่ 6 : ตลัวแปรวลัตถคุ 71
6.7. Class Inheritance หรรือ Child classes
JavaScript Class Inheritance
https://www.w3schools.com/js/js_class_inheritance.asp
class Car{
constructor(brand) {
this.carname = brand ;
}
present() {
return 'I have a ' + this.carname ;
}
}
class Car{
constructor(brand) {
this.carname = brand ;
}
get cnam() {
return this.carname ;
}
set cnam(x) {
this.carname = x ;
}
}
let myCar = new Car("Ford") ;
Logger.log(myCar.cnam) ; // Ford
บททขีริ่ 6 : ตลัวแปรวลัตถคุ 73
กสำรใชค้ set ใชค้ไวยกสำรณลเดคียวกลันกลับเมงงื่อเรสำตค้องกสำรเซก็ตคยู่สำของคถณบลัตพิ แตยู่ไมยู่ตค้องมคีวงเลก็บ
ตรวอยม่สำง – ใชค้ set เปลคีงื่ยน carname เปป็น Volvo
https://www.w3schools.com/js/tryit.asp?filename=tryjs_classes_setter
class Car
constructor(brand) {
this._carname = brand ; // คคุณสมบลัตรจรรง
}
get carname() {
return this._carname ; // นกาคคุณสมบลัตรจรรงมาใชช้
}
set carname(x) {
this._carname = x ; // นกาคคุณสมบลัตรจรรงมาใชช้
}
}
let myCar = new Car("Ford") ;
myCar.carname = "Volvo" ; // *****
Logger.log(myCar.carname ) ; // Volvo
6.7.ค.) Hoisting
แตกตยู่สำงจสำกฟฝังกลชลัน และกสำรประกสำศ JavaScript องงื่นๆ กสำรประกสำศคลสำสจะไมยู่ถยกยกขถึซน นลังื่น
หมสำยควสำมวยู่สำเรสำตค้องประกสำศคลสำสกยู่อนจถึงจะใชค้งสำนไดค้
ตลัวอยยู่สำง
https://www.w3schools.com/js/tryit.asp?filename=tryjs_classes_hoisting
// ยลังไมค่สามารถใชช้คลาสไดช้ ( ณ ตรงนขีนี้)
// myCar = new Car("Ford")
// ขช้างตช้นจะเกรด Error
class Car{
constructor(brand) {
this.carname = brand ;
}
}
// ณ ตรงนขีนี้ใชช้คลาสไดช้แลช้ว
let myCar = new Car("Ford")
บททขีริ่ 6 : ตลัวแปรวลัตถคุ 75
ตรวอยม่สำง – โคค้ดตยู่อไปนคีซสรค้สำงคลสำสของบถคคล และสรค้สำงเมถอดตยู่สำงๆ
class Person {
constructor(name,age) {
this.name = name
this.age = age
}
hello() {
return 'Hello'
}
get getAge() {
return this.age
}
static numberFour() {
return 4 ;
}
} // Close - class
กสำรใชค้งสำน
// สรช้างวลัตถคุดช้วยคค่าทขีริ่กกาหนดดช้วยพารามรเตอรต์ทขีริ่สค่งไป
let p1 = new Person("Wasan",43)
console.log(p1) ;
console.log(p1.name) ;
console.log(p1.hello()) ;
console.log(p1.getAge) ;
ผล
ตรวอยม่สำงททที่ 1- พงซนฐสำน
const user = {
id: 42 ,
is_verified: true
};
// ถค่าย Value ของออ๊อบเจก็กตต์ user ไปใชช้กบลั ออ๊อบเจก็กตต์ไมค่มขีชมืริ่อ
// มขีแตค่ Keys ทขีริ่สอดคลช้องกลับ Keys ของตลัวตช้นทาง – เอามาบาง Keys กก็ไดช้
//
const {id, is_verified } = user ;
Logger.log(id) ; // 42 – ไมค่ตช้องใชช้แบบ user.id อขีกแลช้ว
Logger.log(is_verified) ; // true – ไมค่ตช้องใชช้แบบ user.is_verified อขีกแลช้ว
ตรวอยม่สำงททที่ 3 - เปลคีงื่ยนชงงื่อ
const o = { p: 42, q: true } ;
const { p: foo, q: bar } = o ; // นกาไอเทก็มจาก o ใสค่ใหช้กลับ {} จากนลันี้นจลับใสค่ตลัวแปรใหมค่(ชมือริ่ ใหมค่)
Logger.log(foo) ; // 42
Logger.log(bar) ; // true
บททขีริ่ 6 : ตลัวแปรวลัตถคุ 77
ตรวอยม่สำงททที่ 5 – แตกคคียลของอก๊อบเจก็กตล จสำกนลัซนผยู่สำนเปป็นพสำรสำมพิเตอรลใหค้กลับฟฝังกลชลังื่น
const user = {
id: 42 ,
displayName: 'jdoe' ,
fullName: {
firstName: 'John' ,
lastName: 'Doe'
}
};
function userId({id}) {
return id ;
}
function whois({displayName , fullName: {firstName: name}}) {
return `${displayName} is ${name}` ;
}
Logger.log(userId(user)) ; // 42
Logger.log(whois(user)) ; // "jdoe is John"
Logger.log(englishTitle); // "Scratchpad"
Logger.log(localeTitle); // "JavaScript-Umgebung"
const people = [
{
name: 'Mike Smith' ,
family: {
mother: 'Jane Smith' ,
father: 'Harry Smith' ,
sister: 'Samantha Smith'
},
age: 35
},
{
name: 'Tom Jones' ,
family: {
mother: 'Norah Jones' ,
father: 'Richard Jones' ,
brother: 'Howard Jones'
},
age: 25
}
];
// ลบลบูปดจึงขช้อมบูล(บางตลัว) จากออ๊อบเจก็กตต์ออกมา
for (const { name:n , family: {father:f} } of people) {
Logger.log('Name: ' + n + ' , Father: ' + f) ;
}
// "Name: Mike Smith , Father: Harry Smith"
// "Name: Tom Jones , Father: Richard Jones"
บททขีริ่ 6 : ตลัวแปรวลัตถคุ 79
ตรวอยม่สำงททที่ 9 - กสำรรวมอสำเรยลและกสำรแตกวลัตถถ
อสำเรยลและวลัตถถสสำมสำรถรวมกลันไดค้ สมมตพิวสำยู่ คถณตค้องกสำรอพิเลก็มเมค้นตลทคีงื่สสำม ในอสำเรยลดค้สำนลยู่สำง จสำกนลัซน เรสำ
ตค้องกสำร คคียล name ในวลัตถถ เรสำสสำมสำรถทสสำสพิงื่งตยู่อไปนคีซ
const props = [
{ id: 1 , name: 'Fizz' } ,
{ id: 2 , name: 'Buzz' } ,
{ id: 3 , name: 'FizzBuzz' }
];
// เอา id ตลัวทขีริ่ 3
const [,, { name }] = props ;
Logger.log(name) ; // "FizzBuzz"
Object.assign(target, ...sources)
ตลัวอยยู่สำง
const source = { b: 4, c: 5 } ;
const target = { a: 1, b: 2 } ;
const returnedTarget = Object.assign(target, source) ;
console.log(target) ;
// { a: 1, b: 4, c: 5 } - เขช้าไปเปลขียริ่ นตลัวปลายทางดช้วย ฉะนลันนี้ ไมค่จกาเปป็นตช้องสรช้างตลัวแปรมารลับอขีก
console.log(returnedTarget);
// { a: 1, b: 4, c: 5 }
7.2. create()
Object.create()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create
Object.create(proto, [propertiesObject])
ตรวอยม่สำง
const person = {
isHuman: false ,
printIntroduction: function() {
console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`) ;
}
};
const me = Object.create(person) ;
me.name = 'Matthew' ; // "name" is a property set on "me", but not on "person"
me.isHuman = true ; // inherited properties can be overwritten
me.printIntroduction() ;
// "My name is Matthew. Am I human? true"
พสำรสำมพิเตอรล
obj : วลัตถถทคีงื่เรสำจะกสสำหนดคถณสมบลัตพิThe object on which to define the property.
prop : ชงงื่อของคถณสมบลัตพิ หรงอ Symbol ของคถณสมบลัตพิ ทคีงื่เรสำจะสรค้สำงหรงอปรลับแตยู่ง
descriptor : มคี2 สยู่วน กก็คงอ 1. Data descriptor เปป็นคถณสมบลัตพิทคีงื่มคีคสำยู่ ซถึงื่งอสำจจะเขคียนไดค้หรงอไมยู่ไดค้กก็ไดค้
และ 2. Accessor descriptor เปป็นคถณสมบลัตพิทกคีงื่ สสำหนดโดย getter-setter descriptor ตค้องมคีเพคียงตลัวใดตลัวหนถึงื่ง
ทลัซง Data descriptor และ Accessor descriptor เปป็นวลัตถถซถึงื่งแชรลคคียล(optional)ตยู่อไปนคีซดค้วยกลัน กก็คงอ
configurable, enumerable, value, writable Accessor descriptor มคีคคียล(optional) ตยู่อไปนคีซ get, set
ถค้สำ descriptor ไมยู่มคีคคียล value, writable, get และ set จะถยกมองเปป็น Data descriptor แตยู่ถค้สำมคี Error
จะถยกขวค้สำงออกมสำ
ตลัวอยยู่สำง
const object1 = {} ;
Object.defineProperty(object1, 'property1', {
value: 42 ,
writable: false
}) ;
object1.property1 = 77 ; // throws an error in strict mode
console.log(object1) ; // {property1: 42}
console.log(object1.property1) ; // 42
ตลัวอยยู่สำง
var o = {} ;
Object.defineProperty(o, 'a', {
value : 37 ,
writable : true ,
enumerable : true ,
configurable : true
}) ;
console.log(a) ; // {a: 37}
console.log(o.a) ; // 37
7.4. Descriptors
A property descriptor is a record with some of the following attributes:
value
The value associated with the property (data descriptors only).
writable
true if and only if the value associated with the property may be changed (data descriptors
only).
get
A function which serves as a getter for the property, or undefined if there is no getter
(accessor descriptors only).
set
A function which serves as a setter for the property, or undefined if there is no setter
(accessor descriptors only).
configurable
true if and only if the type of this property descriptor may be changed and if the property
may be deleted from the corresponding object.
enumerable
true if and only if this property shows up during enumeration of the properties on the
corresponding object.
รยปแบบกสำรใชค้งสำน
Object.defineProperties(obj, props)
ตลัวอยยู่สำง
const object1 = {} ;
Object.defineProperties(object1, {
property1: {
value: 42,
writable: true
},
property2: {}
}) ;
console.log(object1.property1) ; // 42
7.6. entries()
Object.entries()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries
รยปแบบกสำรใชค้งสำน
Object.entries(obj)
ตลัวอยยู่สำง
const obj = { foo: 'bar' , baz: 42 } ;
console.log(Object.entries(obj)) ; // [ ['foo', 'bar'], ['baz', 42] ]
Logger.log(Object.entries('foo')) ;
ผล
Logs
[] "a 5"
[] "b 7"
[] "c 9"
7.7. fromEntries()
Object.fromEntries()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries
Object.fromEntries(iterable) ;
7.8. freeze()
Object.freeze()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
รยปแบบกสำรใชค้งสำน
Object.freeze(obj)
ตลัวอยยู่สำง
const obj = {
prop: 42
};
Object.freeze(obj) ;
obj.prop = 33 ; // Throws an error in strict mode
Logger.log(obj.prop) ; // 42
7.9. isFrozen()
Object.isFrozen()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen
เมถอด isFrozen() ใชค้ตรวจสอบวยู่สำวลัตถถถยกแชยู่แขก็งอยยยู่หรงอไมยู่
รยปแบบกสำรใชค้งสำน
ตลัวอยยู่สำง
const object1 = {
property1: 42
};
console.log(Object.isFrozen(object1)) ; // false
Object.freeze(object1) ;
console.log(Object.isFrozen(object1)) ; // true
7.10. seal()
Object.seal()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/seal
เมถอด seal() ปปิดผนถึกวลัตถถ ปป้องกลันกสำรเพพิงื่มคถณสมบลัตพิใหมยู่ และมสำรลคคถณสมบลัตพิทคีงื่มคีอยยยู่แลค้ว ใหค้เปป็น non-
configurable คยู่สำของคถณสมบลัตพิปฝัจจถบลัน ยลังคงเปลคีงื่ยนไดค้ ตรสำบใดทคีงื่ writable
seal() คงนคยู่สำกลลับมสำเปป็นวลัตถถตวลั เดพิมทคีงื่ถยกปปิดผนถึก
รยปแบบกสำรใชค้งสำน
Object.seal(obj)
ตลัวอยยู่สำง
var obj = {
prop: function() {} ,
foo: 'bar'
};
obj.foo = 'baz' ; // เปลขียริ่ นคค่าของคคุณสมบลัตร prop
obj.lumpy = 'woof' ; // เพรริ่มคคุณสมบลัตร lumpy
delete obj.prop ; // ลบคคุณสมบลัตร prop
Logger.log(obj) // { foo: "baz", lumpy: "woof" }
var o = Object.seal(obj) ; // สรช้างวลัตถคุ o จาก obj ทขีริ่ปดปิ ผนจึก
o === obj ; // true ( o มขีทคุกอยค่างเหมมือนกลับ obj )
Object.isSealed(obj) ; // === true
obj.foo = 'quux' ; // เปลขียริ่ นคค่าของคคุณสมบลัตร >>> ยลังคงทกาไดช้
// ไมค่สามารถแปลงคคุณสมบลัตร ไปเปป็น Accessors ไดช้ - ERROR
Object.defineProperty(obj, 'foo', {
get: function() { return 'g' ; }
}) ;
7.11. isSealed()
Object.isSealed()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isSealed
เมถอด isSealed() ใชค้ตรวจสอบวยู่สำวลัตถถถยกปปิดผนถึกหรงอไมยู่
รยปแบบกสำรใชค้งสำน
Object.isSealed(obj)
ตลัวอยยู่สำง
const object1 = {
property1: 42
};
console.log(Object.isSealed(object1)); // false
Object.seal(object1);
console.log(Object.isSealed(object1)) ; // true
7.12. is()
Object.is()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
เมถอด is() ใชค้ตรวจสอบวยู่สำ 2 คยู่สำเปป็นคยู่สำเดคียวกลันหรงอไมยู่
Object.is(value1, value2) ;
ตลัวอยยู่สำง
Object.is('foo', 'foo') ; // true
Object.is(window, window) ; // true
Object.is('foo', 'bar') ; // false
Object.is([], []) ; // false
var foo = { a: 1 } ;
var bar = { a: 1 } ;
Object.is(foo, foo) ; // true
Object.is(foo, bar) ; // false - ใชช้เปรขียบเทขียบเนมือนี้ หาในวลัตถคุไมค่ไดช้
Object.is(null, null) ; // true
// Special Cases
Object.is(0, -0) ; // false
Object.is(-0, -0) ; // true
Object.is(NaN, 0/0) ; // true
7.13. isExtensible()
Object.isExtensible()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible
Object.isExtensible(obj)
ตลัวอยยู่สำง
const object1 = {} ;
console.log(Object.isExtensible(object1)) ; // true
Object.preventExtensions(object1) ;
console.log(Object.isExtensible(object1)) ; // false
ตลัวอยยู่สำง
// New objects are extensible.
var empty = {} ;
Object.isExtensible(empty) ; // === true
7.14. preventExtensions()
Object.preventExtensions()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/preventExtensions
Object.preventExtensions(obj)
ตรวอยม่สำง
// Object.preventExtensions คมืนคค่าเปป็นวลัตถคุตลัวเดรมแตค่ non-extensible
var obj = {} ;
var obj2 = Object.preventExtensions(obj) ;
obj === obj2 ; // true
// Objects สามารถ Extensible ไดช้อยบูค่แลช้ว โดยปรรยาย
var empty = {} ;
Object.isExtensible(empty) ; // === true
// … แตค่สามารถเปลขียริ่ นไดช้
Object.preventExtensions(empty) ;
Object.isExtensible(empty) ; // === false
// Object.defineProperty ขวช้าง Error ออกมา หากเราพยายามไปเพรมริ่ คคุณสมบลัตรใหช้ Non-extensible
var nonExtensible = { removable: true } ;
Object.preventExtensions(nonExtensible) ;
Object.defineProperty(nonExtensible, 'new', {
value: 8675309
}) ; // throws a TypeError
// ในโหมด strict ความพยายามทขีริ่จะเพรมริ่ คคุณสมบลัตรใหช้กบลั Non-extensible จะขวช้าง Error ออกมา
function fail() {
'use strict' ;
nonExtensible.newProperty = 'FAIL' ;
}
fail() ; // throws a TypeError
Object.keys(obj)
ตลัวอยยู่สำง
var instrutor = {
fname : "Wasan" ,
lname : "Khunnsdiloksawet" ,
email : "wasankds@gmail.com" ,
zip : 67140
};
var arr = Object.keys(instrutor) ;
Logger.log(arr) ; // ดบูผลทขีริ่ Logs ------------------ > [ 01 ]
// ใสค่พารามรเตอรต์เปป็นอาเรยต์
var arr2 = Object.keys(arr) ; // ดบูผลทขีริ่ Logs ------------------ > [ 02 ]
Logger.log(arr2) ;
ผล
Logs
[ 01 ] [fname, lname, email, zip]
[ 02 ] [0, 1, 2, 3]
Object.values(obj)
ตลัวอยยู่สำง
const object1 = {
a: 'somestring' ,
b: 42 ,
c: false
};
console.log(Object.values(object1)) ; // ["somestring", 42, false]
ตลัวอยยู่สำง
const my_obj = Object.create({}, { getFoo:
{ value: function() { return this.foo ; } }
}) ;
my_obj.foo = 'bar' ;
console.log(Object.values(my_obj)) ; // ['bar']
7.17. getOwnPropertyDescriptor()
Object.getOwnPropertyDescriptor()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor
Object.getOwnPropertyDescriptor(obj, prop)
obj : วลัตถถทคีงื่จะมองหสำคถณสมบลัตพิ
prop : ชงงื่อหรงอ Symbol ของคถณสมบลัตพิ ซถึงื่งจะรลับคสสำจสสำกลัดควสำมมสำ
ตลัวอยยู่สำง
var o , d ;
o = { get foo() { return 17 ; } } ;
d = Object.getOwnPropertyDescriptor(o , 'foo') ;
// d is {
// configurable: true ,
// enumerable: true ,
// get: /*the getter function*/ ,
// set: undefined
// }
o = { bar: 42 } ;
d = Object.getOwnPropertyDescriptor(o , 'bar') ;
// d is {
// configurable: true ,
// enumerable: true ,
// value: 42 ,
// writable: true
// }
o = { [Symbol.for('baz')]: 73 }
d = Object.getOwnPropertyDescriptor(o , Symbol.for('baz')) ;
// d is {
// configurable: true ,
// enumerable: true ,
// value: 73 ,
// writable: true
// }
o = {} ;
Object.defineProperty(o , 'qux' , {
value: 8675309 ,
writable: false ,
enumerable: false
}) ;
d = Object.getOwnPropertyDescriptor(o , 'qux') ;
// d is {
// value: 8675309 ,
// writable: false ,
// enumerable: false ,
// configurable: false
// }
Object.getOwnPropertyDescriptors(obj)
ตลัวอยยู่สำง
const object1 = {
property1: 42
};
const descriptors1 = Object.getOwnPropertyDescriptors(object1) ;
console.log(descriptors1.property1.writable) ; // true
console.log(descriptors1.property1.value) ; // 42
7.19. getOwnPropertyNames()
Object.getOwnPropertyNames()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames
Object.getOwnPropertyNames(obj)
ตลัวอยยู่สำง
const object1 = {
a: 1 ,
b: 2 ,
c: 3
};
console.log(Object.getOwnPropertyNames(object1)) ; // ["a", "b", "c"]
7.20. getOwnPropertySymbols()
Object.getOwnPropertySymbols()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols
Object.getOwnPropertySymbols(obj)
7.21. getPrototypeOf()
Object.getPrototypeOf()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf
Object.getPrototypeOf(obj)
ตลัวอยยู่สำง
const prototype1 = {} ;
const object1 = Object.create(prototype1) ;
console.log(Object.getPrototypeOf(object1) === prototype1) ; // true
ดยเพพิที่มเตพิม : setPrototypeOf()
Object.setPrototypeOf()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf
myMap.has('bla') // true
myMap.delete('bla') // true
Logger.log(myMap) // Map { 'bla2' => 'blaa2' }
Primitive
https://developer.mozilla.org/en-US/docs/Glossary/Primitive
วลัตถถชนพิด Symbol เปป็นชนพิดขค้อมยลแบบ Primitive ซถึงื่ง Primitive มคี 6 ตลัวกก็คงอ
string, number, bigint, boolean, undefined และ Symbol
โคค้ด
const obj = {'A' : 1 ,
'B' : 2 ,
'C' : 3 ,
'D' : 4 ,
'AAA' : 1 ,
'BBB' : 2 ,
'CCC' : 3 , }
// จลับ Key เดขียว – ถช้า 1 Value มขีหลาย Key จะคมืน Key เดขียว
let key = Object.keys(obj).find( k => obj[k] === 4 ) ;
Logger.log(key) ; // ผล : D
// จลับทคุก Keys – ถช้า 1 Value มขีหลาย Key จะคมืน Keys ทลันี้งหมดเกก็บไวช้ในอาเรยต์
let keys = Object.keys(obj).filter( k => obj[k]=== 1 );
Logger.log(keys) ; // ผล : [A, AAA]
โคค้ด
Object.prototype.getKey = function(value){
for(var key in this){
if(this[key] == value){
return key ;
}
}
return null ;
};
กสำรใชค้งสำน
// ISO 639: 2-letter codes
var languageCodes = {
DA: 'Danish' ,
DE: 'German' ,
DZ: 'Bhutani' ,
EL: 'Greek' ,
EN: 'English' ,
EO: 'Esperanto' ,
ES: 'Spanish'
};
โคค้ด
const objsInArr = [
{dbFileId:'A', dbFileNm:'DB', dbFileShtNm:'Sheet1'} , // Dup
{dbFileId:'B', dbFileNm:'DB2', dbFileShtNm:'SheetDB2' } ,
{dbFileId:'A', dbFileNm:'DB', dbFileShtNm:'Sheet1' } , // Dup
{dbFileId:'A', dbFileNm:'DB', dbFileShtNm:'Sheet2' } ,
{dbFileId:'A', dbFileNm:'DB', dbFileShtNm:'Sheet1' } // Dup
]
const data = Array.from(new Set(objsInArr.map(JSON.stringify))).map(JSON.parse) ;
Logger.log(data) ; // ดบูผลทขีริ่ Logs -------------------------------- >
}
ผล
Logs
[
{dbFileId:'A', dbFileNm:'DB', dbFileShtNm:'Sheet1'} ,
{dbFileId:'B', dbFileNm:'DB2', dbFileShtNm:'SheetDB2' } ,
{dbFileId:'A', dbFileNm:'DB', dbFileShtNm:'Sheet2' }
]
ผล
Logs
[ 01 ] uniqueArray is:
[ {"type":"LICENSE","licenseNum":"10849","state":"CA"} ,
{"type":"LICENSE","licenseNum":"12345","state":"NM"} ,
{"type":"LICENSE","licenseNum":"A7846","state":"CA"} ,
{"type":"LICENSE","licenseNum":"B7037","state":"WA"} ]
9.6. กรองวลัตถถุตสำมคคียย์ทคีที่ระบถุ
https://codereview.stackexchange.com/questions/79384/quickly-filter-an-object-by-keys
กรองคยู่สำในคคียลทคีงื่ระบถ
function testObj() {
const obj = {
"sl_0_v_1":["SLIDES_API1884450033_0", "พระเจช้าทรงเปป็นทขีริ่ลขีนี้ภลัย"] ,
"sl_1_v_2":["SLIDES_API1884450033_5", "พระเจช้าทรงเปป็นทขีริ่ลขีนี้ภลัย"] ,
"sl_2_v_3":["SLIDES_API1884450033_10", "พระเจช้าทรงเปป็นทขีริ่ลขีนี้ภลัย"] ,
"sl_3_v_1":["SLIDES_API1884450033_15", "จรตวรญญาณขช้ากระหาย"] ,
"sl_4_v_2":["SLIDES_API1884450033_20", "จรตวรญญาณขช้ากระหาย"] ,
}
// เอาเฉพาะคขียต์ทขีริ่มขี _v_1
const fil = Object.keys(obj).filter( (kfil) => /_v_1/s.test(kfil)) ;
// Logger.log(fil) ; // [sl_0_v_1, sl_3_v_1]
var valfil = filterObjByKeys(obj,fil) ;
Logger.log(valfil) ;
// ผล : { sl_0_v_1=[SLIDES_API1884450033_0, พระเจช้าทรงเปป็นทขีริ่ลขีนี้ภลัย] ,
sl_3_v_1=[SLIDES_API1884450033_15, จรตวรญญาณขช้ากระหาย] }
function filterObjByKeys(objdata,arr1dim) {
// accepted = ['sl_0_v_1', 'sl_3_v_1']
var result = {} ;
for (var key in objdata){
if (arr1dim.indexOf(key) > -1)
result[key] = objdata[key] ;
}
return result ;
}
ตรวอยม่สำง
function myFunction() {
var num = 51 ;
if(num > 50) { // ถช้ามากกวค่า 50
Logger.log("คะแนนของคจุณครอ " + num + " : ผยู่าน") ; // ทกาบรรทลัดนขีนี้
} // End if
}
if (condition) {
// โคช้ด หากเงมืริ่อนไข condition เปป็น true ;
} else {
// โคช้ด หากเงมืริ่อนไข condition เปป็นอยค่างอมืริ่นๆ(false) ;
}
ตรวอยม่สำง
function myFunction() {
var num = 49.5 ;
if(num > 50 ) {
Logger.log("คะแนนของคจุณครอ " + num + " : ผยู่าน") ;
} else {
Logger.log("คะแนนของคจุณครอ " + num + " : ตก") ; // ทกาบรรทลัดนขีนี้
} // End if
}
if (condition1) {
// โคค้ด หากเงรอที่ นไข condition1 เปป็น true ;
} else if (condition2) {
// โคค้ด หากเงรอที่ นไข condition1 เปป็น false แตยู่ condition2 เปป็น true ;
} else {
// โคค้ด หากเงรอที่ นไข condition1 เปป็น false แตยู่ condition2 เปป็น false ;
}
function myFunction() {
var num = 62;
if(num > 80 ) {
Logger.log("คะแนนของคจุณครอ " + num + " : A") ;
} else if (num > 70 ){
Logger.log("คะแนนของคจุณครอ " + num + " : B") ;
} else if (num > 60 ){
Logger.log("คะแนนของคจุณครอ " + num + " : C") ; // ทกาบรรทลัดนขีนี้
} else {
Logger.log("คะแนนของคจุณครอ " + num + " : F") ;
}
}
10.2. switch
JavaScript Switch Statement
https://www.w3schools.com/js/js_switch.asp
switch ใชค้งสำนคลค้สำย if – else if – else ใชค้ทสสำบลก็อคของโคค้ดตสำมเงงงื่อนไข
โครงสรค้สำงของ switch
expression เปป็นตลัวทคีงื่ใชค้ประเมพินวยู่สำจะไปลง case ไหน เชยู่นถค้สำ expression คงนคยู่สำกลลับมสำเปป็น 2 จะไป
ทสสำ case 2 : (โคค้ด) เปป็นตค้น หสำกไมยู่มคคี ยู่สำทคีงื่แมทเลย บรรทลัด default จะทสสำงสำน
หลลังจบ case จะปปิด case ดค้วย คสสำสลังื่ง break ;
switch(expression) {
case x :
// code block
break ;
case y :
// code block
break ;
default :
// ถช้าไมค่มขีทขีริ่ตรงกลับ Case รลันโคช้ดทขีริ่บลก็อคนขีนี้
}
ตรวอยม่สำง
function swtichTest() {
var day ;
switch (new Date().getDay()) { // คมืนคค่ากลลับมาเปป็น 0-6
case 0 : day= "Sunday" ; break ;
case 1 : day= "Monday" ; break ;
case 2 : day= "Tuesday" ; break ;
case 3 : day= "Wednesday" ; break ;
case 4 : day= "Thursday" ; break ;
case 5 : day= "Friday" ; break ;
case 6 : day= "Saturday" ;
}
Logger.log(day) ;
}
10.3. for
JavaScript For Loop
https://www.w3schools.com/js/js_loop_for.asp
for เปป็นคสสำสลังื่งลยป ใชค้วนรอบเพงงื่อทสสำโคค้ดๆซสซสำ
โครงสรค้สำง
for (statement 1 ; statement 2 ; statement 3) {
// โคช้ด
}
function forTest1() {
var text = "" ;
for (i = 0 ; i < 3 ; i++) {
text += "The number is " + i + "<br>" ;
// หรมือ text = text + "The number is " + i + "<br>" ;
} // End for
Logger.log(text) ;
// พรมพต์ : The number is 0<br>The number is 1<br>The number is 2<br>
// i=0 i=1 i=2
}
function forTest2() {
var cars = [ "BMW", "Volvo", "Saab", "Ford" ] ;
var i, len, text ;
for (i = 0, len = cars.length, text = "" ; i < len ; i++) {
// statement1
text += cars[i] + "<br>" ;
} // End for
Logger.log(text) ; // พรมพต์ : BMW<br>Volvo<br>Saab<br>Ford<br>
}
10.4. for in
JavaScript For Loop
https://www.w3schools.com/js/js_loop_for.asp
for in ใชค้กลับตลัวแปรอก๊อบเจก็กตล เพงงื่อวนลยป สยู่ง key ทคีละตลัว เขค้สำไปเปป็นวลัตถถดพิบใหค้กลับโคค้ดใน for
ตรวอยม่สำงททที่ 1
function forIn_1() {
var oPerson = {
fname : "John",
lname : "Doe",
age : 25
};
var tText = "" ;
var x ;
for (x in oPerson) {
tText += oPerson[x] + " " ;
} // End - for/In
Logger.log(tText) ; // พรมพต์ : John Doe 25
}
function forIn_2() {
var oPerson = {
fname : "John" ,
lname : "Doe" ,
age : 25
};
var tText = "" ;
var x ;
for (x in oPerson) {
tText += oPerson[x]+" ";
Logger.log(x) ; // x คมือ Key ของ Object
Logger.log(tText) ; // tText เกก็บ Value ของ Key
} // End For In
}
ผล
Logs
[01] fname // Key 1
[02] John // Value 1
[03] lname // Key 2
[04] Doe // Value 2
[05] age // Key 3
[06] 25 // Value 3
ตรวอยม่สำงททที่ 3 – ใชค้ var [ key , val ] ใสยู่ลงใน for/in ไดค้ เพงงื่อวนลยปจลับ keys หรงอ values
function forIn_3() {
var oPerson = {
fname : "John",
lname : "Doe",
age : 25
};
for (var [ key , val ] in oPerson) {
Logger.log(key) ;
Logger.log(val) ;
} // End For In
}
ตรวอยม่สำงททที่ 1
var cars = [ 'BMW', 'Volvo', 'Mini'] ;
var x ;
for (x of cars) {
Logger.log(x) ;
}
ผล
Logs
[ ] BMW
[ ] Volvo
[ ] Mini
ตรวอยม่สำงททที่ 2
var txt = 'AppsScript' ;
var x ;
for (x of txt) {
Logger.log(x) ;
}
ผล
Logs
[]A
[]p
[]p
[]s
[]S
[]c
[]r
[]i
[]p
[]t
while (condition) {
// โคช้ดทขีริ่จะถบูกดกาเนรนการ
}
ตรวอยม่สำงททที่ 1
function while_1() {
var text = "" ;
var i = 0 ;
while ( i < 10 ) {
text += "The number is " + i + " ." ;
i++ ;
} // End while
Logger.log(text) ;
}
ผล
Logs
[01] The number is 0 .The number is 1 .The number is 2 .The number is 3 .The
number is 4 .The number is 5 .The number is 6 .The number is 7 .The number
is 8 .The number is 9 .
10.7. do while
JavaScript do/while Statement
https://www.w3schools.com/jsref/jsref_dowhile.asp
do while จะทสสำโคค้ดทคีงื่อยยใยู่ นบลก็อค 1 ครลัซงกยู่อน จสำกนลัซนจถึงเชก็คเงงงื่อนไขทคีงื่ while และจะทสสำโคค้ดทคีงื่อยยยู่ในบลก็อค
ไปเรงงื่อยๆ ตรสำบทคีงื่เงงงื่อนไขเปป็นจรพิง
รยปแบบกสำรใชค้งสำน do while ดลังตยู่อไปนคีซ
do {
// โคช้ดทขีริ่จะถบูกดกาเนรนการ
} while (condition)
ผล
Logs
[01] The number is 11. The number is 10. The number is 9. The number is 8. The
number is 7. The number is 6. The number is 5. The number is 4. The number is 3.
The number is 2. The number is 1. The number is 0.
try {
// Block of code to try
}
catch(err) {
// Block of code to handle errors
}
ตรวอยม่สำง
function myFunction() {
adddlert("Welcome guest!") ; // ไมค่มขีฟฟังกต์ชนลัริ่ ชมืริ่อ adddlert
// เกรด Error ระบบไมค่ไปตค่อ
}
ผล
Logs
[ ] ReferenceError: "adddlert" is not defined. (ไมค่มขีฟฟังกต์ชนลัริ่ adddlert )
[ ] Keep going
10.8.ข.) throw
throw ใชค้ในบลก็อค try (ทคีงื่องงื่นกก็ใชค้ไดค้) ใชค้สรค้สำง Error เอง และขค้สำงเปป็น Error ออกมสำ เหมสำะมสำกกลับ
กสำรนสสำไปทสสำ Validation
ผล
Logs
[ ] Input is not a number
ผล
Logs
[ ] Input is not a number
[ ] 5.0
11.2. พรืซนฐสำนขค้อมมูลชนพดอสำเรยย์
สมสำชพิกในอสำเรยลเกก็บไวค้ในวงเลก็บ [ ] เชยู่น
function arrayFunction() {
// สรช้างตลัวแปรอาเรยต์วค่างๆ
var newArray = [] ;
// ใสค่ขช้อมบูลลงในอาเรยต์ 0 1 2 3
var fruitsArray = [ 'Apple' , 'Banana' , 'Pear' , 'Strawberry' ] ;
Logger.log(fruitsArray) ; // พรมพต์ : [Apple, Banana, Pear, Strawberry]
// ลกาดลับขช้อมบูลในอาเรยต์เรรริ่มจาก 0
// เขช้าถจึงขช้อมบูลในอาเรยต์ไดช้โดยใชช้สลัญลลักษณต์ดลังนขีนี้
Logger.log(fruitsArray[0]) ; // พรมพต์ : Apple
Logger.log(fruitsArray[1]) ; // พรมพต์ : Banana
Logger.log(fruitsArray[2]) ; // พรมพต์ : Pear
Logger.log(fruitsArray[3]) ; // พรมพต์ : Strawberry
Logger.log(fruitsArray[4]) ; // พพิมพล : undefined (ไมค่มขีดรรชนขีลกาดลับทขีริ่ 4)
}
11.3.ค.) การนตับจสานวนสมาชพิกในอาเรยล
กสำรนลับจสสำนวนสมสำชพิกในอสำเรยลใชค้ ทสสำไดค้โดยใชค้คถณสมบลัตพิ length ของอสำเรยล
ตรวอยม่สำง - กรณคี 1 มพิตพิ
var fruitsArray = [ 'Apple' , 'Banana' , 'Pear' , 'Strawberry' ] ;
Logger.log(fruitsArray.length) ; // พรมพต์ : 4
รยปแบบกสำรใชค้งสำน
ตรวอยม่สำงททที่ 1 – ใชค้รวมอสำเรยล
// ใชช้ concat()
let arr = [ 1 ,2 ,3 ] ;
let arr2 = [ 4 ,5 ] ;
arr = arr.concat(arr2) ;
Logger.log(arr) ; // [ 1 , 2 , 3 , 4 , 5 ]
// ใชช้ … เอาเฉพาะสมาชรกของอาเรยต์มา
let arr3 = [ 6 ,7 ,8 ] ;
let arr4 = [ 9 ,10 ] ;
arr3 = [...arr3 , ...arr4] ;
Logger.log(arr3) ; // [ 6 , 7 , 8 , 9 , 10 ]
// ใชช้การปป้อนสมาชรกเปป็ฯอาเรยต์ลงไปตรง
let arr = ['a','b'] ;
let arr2 = [arr,'c','d'] ;
Logger.log(arr2) ; // [ [ 'a', 'b' ], 'c', 'd' ]
// ใชช้ ...
let arr3 = ['a','b'] ;
let arr4 = [...arr,'c','d'] ;
Logger.log(arr4) ; // [ 'a', 'b', 'c', 'd' ]
ตรวอยม่สำงททที่ 5 – ใชค้คสสำนวณในกค้อนอสำเรยล
// ใชช้ Math กลับกช้อนอาเรยต์ตรงๆไมค่ไดช้
let arr = [ 1 , 2 , 3 , -1 ] ;
Logger.log(Math.min(arr)) ; // NaN - ตช้องวนลบูปเขช้าไปดจึงสมาชรกออกมาคกานวณ
// ใชช้ ...
let arr2 = [ 1 , 2 , 3 , -1 ] ;
console.log(Math.min(...arr2)) ; // -1
ตรวอยม่สำงททที่ 2
function fun(a,b,...c){
Logger.log(`${a} ${b}`) ; // Mukul Latiyan
Logger.log(c) ; // [ 'Lionel', 'Messi', 'Barcelona' ]
Logger.log(c[0]) ; // Lionel
Logger.log(c.length) ; // 3
Logger.log(c.indexOf('Lionel')) ; // 0
}
// a b c d e
fun('Mukul','Latiyan','Lionel','Messi','Barcelona') ;
ตรวอยม่สำงททที่ 1 - พงซนฐสำน
let a, b ;
// Default ของ a กก็คอมื 5 จากนลันี้นกกาหนดคค่าใหมค่กก็คมือ 1
[a=5, b=7] = [1] ;
Logger.log(a) ; // 1
Logger.log(b) ; // 7
พสำรสำมพิเตอรล
Parameter Description
item1, ..., itemX (จกาเปป็น) สมาชรกใหมค่ทขีริ่จะเพรมริ่ ลงในอาเรยต์
ตรวอยม่สำง
var fruits1 = [ "Banana" , "Orange" , "Apple" , "Mango"] ;
// push สมาชรกเขช้าไป
fruits1.push("Kiwi" , "Lemon" , "Pineapple") ;
// Logs ดบูอกขี ครลันี้ง จะพบวค่าสมาชรกเปลขียริ่ นไป
Logger.log(fruits1) ; // [Banana, Orange, Apple, Mango, Kiwi, Lemon, Pineapple]
12.2. unshift()
JavaScript Array unshift() Method
https://www.w3schools.com/jsref/jsref_unshift.asp
unshift() ใชค้ใสยู่ขค้อมยลลงในอสำเรยล ณ จถดแรก โดยเขค้สำไปเปลคีงื่ยนแปลงอสำเรยลตลัซงตค้น และคงนคยู่สำกลลับมสำเปป็น
จสสำนวนสมสำชพิกของอสำเรยล
รยปแบบกสำรใชค้งสำน
array.unshift(item1, item2, ..., itemX)
พสำรสำมพิเตอรล
Parameter Description
item1, ..., itemX (จกาเปป็น) สมาชรกใหมค่ทขีริ่จะเพรมริ่ ลงในอาเรยต์
12.3. pop()
JavaScript Array pop() Method
https://www.w3schools.com/jsref/jsref_pop.asp
pop() ใชค้ลบขค้อมยลในอสำเรยล ตลัวทค้สำยสถด และคงนคยู่สำกลลับมสำเปป็นขค้อมยลตลัวนลัซน
รยปแบบกสำรใชค้งสำน
array.pop()
ตลัวอยยู่สำง
var fruits1 = [ "Banana" , "Orange" , "Apple" , "Mango" ] ;
fruits1.pop() ; // เขช้าไปเปลขียริ่ นแปลงอาเรยต์ตลันี้งตช้นดช้วย
Logger.log(fruits1) ; // [ Banana , Orange , Apple ]
12.4. shift()
JavaScript Array shift() Method
https://www.w3schools.com/jsref/jsref_shift.asp
shift() ใชค้ลบขค้อมยลในอสำเรยล ตลัวแรก และคงนคยู่สำกลลับมสำเปป็นขค้อมยลตลัวทคีงื่ถยกลบออก
รยปแบบกสำรใชค้งสำน
array.shift()
12.5. splice()
JavaScript Array splice() Method
https://www.w3schools.com/jsref/jsref_splice.asp
splice() ใชค้เพพิงื่มหรงอลบ สมสำชพิกในอสำเรยล แบบกสสำหนดตสสำแหนยู่งไดค้ โดยเขค้สำไปเปลคีงื่ยนแปลงอสำเรยลตลัซงตค้น
และ คงนคยู่สำกลลับมสำเปป็นสมสำชพิกทคีงื่ถยกลบ
รยปแบบกสำรใชค้งสำน
array.splice(index, howmany, item1, ....., itemX)
พสำรสำมพิเตอรล
Parameter Description
(ตช้องการ) เลข Integer ระบคุตกาแหนค่งทขีริ่จะลบหรมือแทรกสมาชรก
index
ใชช้เลขลบ เพมืริ่อระบคุตกาแหนค่งจากทช้าย
howmany (ไมค่บลังคลับ) จกานวนสมาชรกทขีริ่จะลบออก (0 = ไมค่ลบ)
item1, ..., itemX (ไมค่บลังคลับ) สมาชรกใหมค่ทขีริ่จะเพรริ่มลงในอาเรยต์ (ไมค่ระบคุ = ไมค่เพรมริ่ )
12.6. slice()
JavaScript Array Methods - Slicing an Array
https://www.w3schools.com/js/js_array_methods.asp
พสำรสำมพิเตอรล
Parameter Description
(ไมค่บลังคลับ) เลข integer ทขีริ่ใชช้ระบคุตกาแหนค่งเรรริ่มการเลมือก
- ตกาแหนค่งแรก เรรริ่มจาก 0
start
- ใชช้เลขลบ เพมืริ่อเลมือกจากดช้านหลลัง
- หากปลค่อยวค่างจะหมายถจึง 0
(ไมค่บลังคลับ) เลข integer ทขีริ่ใชช้ระบคุตกาแหนค่งจบการเลมือก แตค่ไมค่รวมตลัวนขีนี้
end - หากปลค่อยวค่างไวช้ จะเรรริ่มจาก start ไปจนถจึงตลัวสคุดทช้าย
- ใชช้เลขลบ เพมืริ่อเลมือกจากดช้านหลลัง
ตรวอยม่สำง
// 0 1 2 3 4
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"] ;
fruits.slice(3) // ไมค่เขช้าไปเปลขียริ่ นแปลงอาเรยต์ตลันี้งตช้น
// เรรริ่มจากดรรชนขีตกาแหนค่งทขีริ่ 3 ไปจนจบ
var citrus = fruits.slice(3) ; // [ Apple, Mango ]
12.8. join()
JavaScript Array join() Method
https://www.w3schools.com/jsref/jsref_join.asp
ใชค้รวมขค้อมยลในอสำเรยล ใหค้กลสำยเปป็นขค้อมยล String (ขค้อควสำม) กค้อนเดคียวทคีงื่ขลัซนดค้วยเครงงื่องหมสำย , (คอมมยู่า)
หรงอ กสสำหนดตลัวขลัซนไดค้เอง
รยปแบบกสำรใชค้งสำน
array.join(separator)
พสำรสำมพิเตอรล
Parameter Description
separator (เวช้นวค่างไดช้) ตลัวขลันี้น ถช้าปลค่อยวค่างไวช้ จะใชช้ตลัวขลันี้นเปป็นคอมมค่า
function arrayFunction() {
var arr = [ 'Apple' , 'Banana' , 'Pear' , 'Strawberry' ] ;
var joinArr = arr.join() ;
Logger.log(joinArr) ; // Apple,Banana,Pear,Strawberry
var joinArr2 = arr.join(" - ") ;
Logger.log(joinArr2) ; // Apple - Banana - Pear - Strawberry
}
12.9. concat()
JavaScript Array concat() Method
https://www.w3schools.com/jsref/jsref_concat_array.asp
concat() ใชค้รวมอสำเรยลเขค้สำดค้วยกลัน เมถอดนคีซไมยู่เปลคีงื่ยนแปลงอสำเรยลเดพิม แตยู่จะสรค้สำงอสำเรยลใหมยู่ ฉะนลัซน ใหค้
สรค้สำงตลัวแปรมสำรองรลับผลกสำรรวมอสำเรยลดค้วย
รยปแบบกสำรใชค้งสำน
พสำรสำมพิเตอรล
Parameter Description
array2, array3, ..., arrayX (ตช้องการ) อาเรยต์ทขีริ่จะถบูกรวม
function testConcat(){
var arr1dim = [37, 39, 42, 46, 11, 33] ;
var moreCcol = ['A', 'B'] ;
arr1dim = arr1dim.concat(moreCcol) ;
Logger.log(arr1dim) ; // [37.0, 39.0, 42.0, 46.0, 11.0, 33.0, A, B]
}
รยปแบบกสำรใชค้งสำน
array.indexOf(item, start)
พสำรสำมพิเตอรล
Parameter Description
item (ตช้องการ) ขช้อมบูลทขีใริ่ ชช้คช้นหา
start (ไมค่จกาเปป็น) จคุดเรรริ่มตช้นคช้นหา โดยคค่าลบ จะเรรริ่มนลับตกาแหนค่งและคช้นหาจากดช้านหลลัง
function testIndexOf2() {
var day = new Date("Wed Feb 5 2020 00:00:00 GMT+0700 (Indochina Time)").valueOf()
Logger.log(day.toString()) ; // 1580835600000
var disableDays = [
new Date("Tue Feb 11 2020 00:00:00 GMT+0700 (Indochina Time)").valueOf(),
new Date("Wed Feb 12 2020 00:00:00 GMT+0700 (Indochina Time)").valueOf(),
new Date("Wed Feb 5 2020 00:00:00 GMT+0700 (Indochina Time)").valueOf()
];
// มขี day ใน disableDays สลักตลัวหรมือไมค่
var aaa = disableDays.indexOf(day.valueOf()) > -1 ;
Logger.log(aaa) ; // true
}
12.11. lastIndexOf()
JavaScript Array 6.11. lastIndexOf() Method
https://www.w3schools.com/jsref/jsref_lastindexof_array.asp
คลค้สำยกลับ indexOf() แตยู่กรณคีทคีงื่เจอคยู่สำทคีงื่คค้นหสำหลสำยคยู่สำ จะคงนคยู่สำตลัวสถดทค้สำยในละดลับทคีงื่พบกลลับมสำ
รยปแบบกสำรใชค้งสำน
array.indexOf(item, start)
พสำรสำมพิเตอรล
Parameter Description
item (ตช้องการ) ขช้อมบูลทขีริ่ใชช้คช้นหา
start (ไมค่จกาเปป็น) จคุดเรรริ่มตช้นคช้นหา โดยคค่าลบ จะเรรริ่มนลับตกาแหนค่งและคช้นหาจากดช้านหลลัง
12.12. reverse()
JavaScript Array reverse() Method
https://www.w3schools.com/jsref/jsref_reverse.asp
ใชค้กลลับตสสำแหนยู่งสมสำชพิกเอสำเรยลจสำกหนค้สำไปหลลัง หลลังไปหนค้สำ
รยปแบบกสำรใชค้งสำน
array.reverse()
ตลัวอยยู่สำง
พสำรสำมพิเตอรล
Parameter Description
element (จกาเปป็น) ขช้อมบูลทขีริ่ใชช้คช้นหา
start (ไมค่บลังคลับ) ตกาแหนค่งทขีริ่จะเรรริ่มคช้นหา คค่าปรรยายคมือ 0
function example() {
var fruits = [ "Banana", "Orange", "Apple", "Mango" ] ;
var m = fruits.includes("Banana") ; // true
var n = fruits.includes("Banana", 3) ; // false
}
12.14. toString()
JavaScript Array toString() Method
https://www.w3schools.com/jsref/jsref_tostring_array.asp
คงนคยู่สำสมสำชพิกทลัซงหมดในอสำเรยลกลลับมสำเปป็น String ทคีงื่ขลัซนดค้วย , (คอมมยู่สำ) เมถอดนคีซไมยู่เปลคีงื่ยนแปลงอสำเรยลตลัซง
ตค้น ฉะนลัซนจถึงตค้องสรค้สำงตลัวแปรมสำรลับคยู่สำ
ตรวอยม่สำง
var fruits = ["Banana", "Orange", "Apple", "Mango"] ;
var x = fruits.toString() ; // Banana,Orange,Apple,Mango
12.15. keys()
JavaScript Array keys() Method
https://www.w3schools.com/jsref/jsref_keys.asp
คงนคยู่สำกลลับมสำเปป็ฯอสำรเยลทคีงื่เกก็บดรรชนคีลสสำดลับของอสำเรยลทคีงื่ระบถ
ตลัวอยยู่สำง
var fruits = ["Banana", "Orange", "Apple", "Mango"] ;
var fk = fruits.keys() ; // [0,1,2,3]
for (x of fk) {
Logger.log(x) ; // ดบูผลทขีริ่ Logs –----------------------------- >
}
ผล
Logs
[ ] 0.0
[ ] 1.0
[ ] 2.0
[ ] 3.0
พสำรสำมพิเตอรล
Parameter Description
value (จกาเปป็น) คค่าทขีริ่จะเตรมลงในอาเรยต์
start (ไมค่จกาเปป็น) ดรรชนขีลกาดลับในอาเรยต์เรรริ่มตช้น ทขีริ่จะเตรมคค่า
end (ไมค่จกาเปป็น) ดรรชนขีลกาดลับในอาเรยต์สคุดทช้ายเรรริ่มตช้น ทขีริ่จะเตรมคค่า (คค่าปรรยายเปป็น array.length)
ตรวอยม่สำง
12.17. Array.from()
JavaScript Array from() Method
https://www.w3schools.com/jsref/jsref_from.asp
Array.from()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from
เมถอด Array.from() คงนคยู่สำกลลับมสำเปป็นวลัตถถอสำเรยล จสำกวลัตถถชนพิดองงื่นๆ ตสำมคถณสมบลัตพิ length หรงอ วลัตถถทคีงื่
สสำมสำรถวนลยปเขค้สำไปไดค้ (Iterable object)
รยปแบบกสำรใชค้งสำน
Array.from(object, mapFunction, thisValue)
พสำรสำมพิเตอรล
Parameter Description
object (Required) วลัตถคุทขีริ่จะแปลงไปเปป็นอาเรยต์
mapFunction (Optional) ฟฟังกต์ชนลัริ่ ทขีริ่เรขียกใชช้(เมถอด map) เพมืริ่อทกางานกลับแตค่ละอรเลก็มเมช้นตต์ของอาเรยต์
thisValue (Optional) คค่าทขีใริ่ ชช้ในฐานะวลัตถคุ this เมมืริ่อประมวล mapFunction
function f() {
return Array.from(arguments) ;
}
f(1, 2, 3) ; // [1.0, 2.0, 3.0]
รยปแบบกสำรใชค้งสำน
array.map(function(currentValue, index, arr), thisValue)
พสำรสำมพิเตอรล
Parameter Description
(Required) A function to be run for each element in the array.
Function arguments:
function(currentVal Argument Description
ue, index, arr) currentValue Required. The value of the current element
index Optional. The array index of the current element
arr Optional. The array object the current element belongs to
(Optional) A value to be passed to the function to be used as its "this" value.
thisValue If this parameter is empty, the value "undefined" will be passed as its "this"
value
Logs
[01] [ [Linda, 28.0, Bangkok],
[Lisa, 36.0, Nontaburi],
[John, 43.0, Petchaboon] ]
function mapMethod() {
var arr2dim = [
["Linda", 27, "Bangkok" ] , // สมาชรกตลัวทขีริ่ 1
["Lisa", 35, "Nontaburi" ] , // สมาชรกตลัวทขีริ่ 2
["John", 42, "Petchaboon" ] // สมาชรกตลัวทขีริ่ 3
];
var new_arr2dim = arr2dim.map(function doSomthing(row) {
var textOutput = row[0] + " is from " + row[2] ;
var newAge = row[1] + 1 ;
return [textOutput , newAge] ;
});
Logger.log(new_arr2dim) ;
}
function filterArr() {
var arr1 = [ 1 , 2 , 3 , 4 , 5 , 7 ] ;
var fData = arr1.filter(function(item){
return !(item >= 4) ; // ตลัวทขีริ่ไมค่ >= 4
}) ;
Logger.log(fData); // พพิมพล : [1.0, 2.0, 3.0]
} // End function
function filterArr() {
var arr = [ "txt1" , 4 , 8 , 33 , 2 , "txt2" , 9 ] ;
var new_arr = arr.filter(filterLogic) ;
Logger.log(arr); // พรมพต์ : [ "txt1" , 4 , 8 , 33 , 2 , "txt2" , 9 ]
Logger.log(new_arr); // พรมพต์ : [ 8.0 , 33.0 , 9.0]
// เฉพาะคค่ามากกวค่า 6 – ตลัวทขีริ่เปป็นขช้อความถบูกตลัดทรนี้ง
} // End function
var filterLogic = function(item) {
if(item>6)
{
return true ; // คมืนคค่า true - เมมืริ่อคค่ามากกวค่า 6
}
else
{
return false ;
} ; // End if
} // End function
function filterArr() {
var arr = [ "txt1" , 4 , 8 , 33 , 2 , "txt2" , 9 ] ;
var new_arr = arr.filter(filterLogic) ;
Logger.log(arr); // พรมพต์ : [ "txt1" , 4 , 8 , 33 , 2 , "txt2" , 9 ]
Logger.log(new_arr); // พรมพต์ : [ 4.0 , 8.0 , 33.0 , 2.0 , txt2 , 9.0 ]
// อะไรทขีริ่ไมค่ใชค่ txt1 มาหมด
} // End function
var filterLogic = function(item) {
if(item == "txt1" )
{
return false ;
}
else
{
return true ; // คมืนคค่า true – อะไรทขีริ่ไมค่ใชค่ "txt1" มาหมด
} ; // End if
} // End function
Array.prototype.filter()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
// arr = อาเรยต์
// query = String ทขีริ่จะคช้นหา
function filterItems(arr, query) {
return arr.filter(function(el) {
return el.toLowerCase().indexOf(query.toLowerCase()) !== -1
// เชค่น "apple".toLowerCase().indexOf("ap".toLowerCase()) !== -1
})
}
13.3.ก.) ขค้อมยลเปป็นตตัวเลขทตันี้งหมด
function sortArr() {
var arr1 = [4,2,5,6,5,2];
var arr2 = [4,2,5,6,5,2,44,9,56];
Logger.log(arr1.sort()) ; // พรมพต์ : [2.0, 2.0, 4.0, 5.0, 5.0, 6.0]
Logger.log(arr2.sort()) ; // พรมพต์ : [2.0, 2.0, 4.0, 44.0, 5.0, 5.0, 56.0, 6.0, 9.0]
} // End function
13.3.ข.) ขค้อมยลเปป็นขค้อความทตันี้งหมด
ตรวอยม่สำงททที่ 4 - กรณคีขค้อมยลมคีตลัวเลขผสมอยยยู่ในขค้อควสำม
กรณคีขค้อมยลมคีตลัวเลขผสมอยยยู่ในขค้อควสำม ใหค้แปลงเปป็นชนพิดขค้อควสำมกยู่อน โดยใชค้ฟฝังกลชลังื่น toString() ไมยู่เชยู่น
นลัซนจะ Error แมค้เปป็นตลัวเลขกก็จะถยกเรคียงแบบขค้อควสำม
function sortArr() {
var arr6 = ["t","n","5","A",4,"b",44,"a","r","B","Apple","apple","APple"]; // 5 ชนรดเปป็นขช้อความ
var dataSort = arr6.sort(function(a,b){
a = a.toString().toLowerCase();
b = b.toString().toLowerCase();
if(a > b) { return 1 ; } // -1 หากตช้องการเรขียงมากไปนช้อย
else if (a < b) { return -1 ; } // 1 หากตช้องการเรขียงมากไปนช้อย
return 0 ;
}); // End sort
Logger.log(dataSort); // พรมพต์ : [4.0, 44.0, 5, A, a, Apple, apple, APple, b, B, n, r, t]
} // End function
function sortArr() {
var arr5 = var arr5 = ["t","","n","5","A",undefined,"",null
, "a",undefined,"r",1,66,9,"B","Apple","apple","APple"] ;
Logger.log(arr5.sort());
// พรมพต์ : [, , 1.0, 5, 66.0, 9.0, A, APple, Apple, B, a, apple, n, null, r, t, null, null]
} // End function
ตรวอยม่สำงททที่ 2 - แยกขค้อมยลเปป็น 2 กค้อน กค้อนขค้อควสำม และ ตลัวเลข ดค้วยอสำเรยลวยู่สำงๆ 2 ตลัว จสำกนลัซน จถึงเรคียง
แลค้วเอสำมสำรวมกลันดค้วย concat
function sortArr() {
var arr7 = ["t","","n","5","A",undefined,"",null,
"a",undefined,"r",1,66,9,"B","Apple","apple","APple"] ;
var numberArr =[];
var textArr =[];
var otherArr =[];
arr7.map(function(item){
if(typeof item === "number"){
numberArr.push(item) ;
} else if (typeof item === "string"){
textArr.push(item.toString());
} else {
otherArr.push(item);
}; // End if
}); // End map
Logger.log(numberArr);
// พพิมพล : [7.0, 66.0, 19.0]
Logger.log(textArr);
// พพิมพล : [t, , n, 5, A, , a, r, B, Apple, apple, APple]
Logger.log(otherArr);
// พพิมพล : [null, null, null]
// รวมอาเรยต์ทขีริ่เรขียงแลช้วเขช้าดช้วยกลัน
var comArr = numberArr.sort(sortNumber).concat(textArr.sort(sortAlpha));
Logger.log(comArr);
// พพิมพล : [7.0, 19.0, 66.0, , , 5, A, APple, Apple, B, a, apple, n, r, t]
} // End function
พสำรสำมพิเตอรล
Parameter Description
(จกาเปป็น) ฟฟังกก็ชลัริ่นทขีริ่จะรลัน สกาหรลับแตค่ละอรเลก็มเมช้นตต์ในอาเรยต์
อารต์กรวเมช้นตต์ของฟฟังกต์ชลัริ่น
function(currentValue, Argument Description
index, arr) currentValue (จกาเปป็น) คค่าของอรเลก็มเมช้นตต์ปฟัจจคุบลัน
index (ไมค่จกาเปป็น) ดรรชนขีอาเรยต์ของอรเลก็มเมช้นตต์ปฟัจจคุบลัน
arr (ไมค่จกาเปป็น) วลัตถคุอาเรยต์ของทขีริ่อรเลก็มเมช้นตต์ปฟัจจคุบลัน
(ไมค่จกาเปป็น) คค่าทขีริ่จะถบูกสค่งใหช้กลับฟฟังกต์ชลัริ่น เพมืริ่อถบูกใชช้เปป็นคค่า "this"
thisValue
ถช้าเวช้นไวช้ คค่า undefined จะถบูกสค่งผค่าน
function every_some() {
function every_some() {
var arr2 = [ ["a" , 6] ,
["b" , 9] ,
["c" , 6] ] ;
var resultsEvery = arr2.every(function(row){
return row[0] === "b" ; // [ a , b , c ]
// F T F => มท false 1 ตตัวครนคยู่า false
});
Logger.log(resultsEvery); // พรมพต์ : false
var resultsSome = arr2.some(function(num){
return num[1] > 7 ; // [ 6 , 9 , 6]
// T F T - มท true 1 ตตัวครนคยู่า true
});
Logger.log(resultsSome) ; // พรมพต์ : true
} // End function
function test(){
var survey = [
{ name: "Steve", answer: "Yes" } ,
{ name: "Jessica", answer: "Yes" } ,
{ name: "Peter", answer: "Yes" } ,
{ name: "Elaine", answer: "No" }
];
Logger.log(survey.every(isSameAnswer));
}
function isSameAnswer(el, index, arr) {
// arr กก็คมือ อาเรยต์ทลันี้งยวง
if (index === 0){
return true ;
} else {
return (el.answer === arr[index - 1].answer);
}
}
เอสำขค้อควสำมในอสำเรยลมสำตยู่อกลัน
function forEach_2() {
var fruits = ["apple", "orange", "cherry"]; // item
// 0 1 2 // index
var text = "" ;
fruits.forEach(function(item, index) { // 2 Argruments
text += index + ":" + item + "<br>" ;
}) ; // จบ forEach
Logger.log(text) ; // พพิมพล 0:apple<br>1:orange<br>2:cherry<br>
}
function forEach_3() {
var numbers = [65, 44, 12, 4];
numbers.forEach(function(item, index, arr) { // 3 Argruments
// เอาสมาชรกในอาเรยต์ numbers มาประมวลผล
// แลช้วเกก็บไวช้ในอาเรยต์ arr (ตลัวเดรม) เปป็นการ Assign คค่าใหมค่ลงไป
arr[index] = item * 10;
} // จบ forEach
Logger.log(numbers);
// พพิมพล : [650.0, 440.0, 120.0, 40.0]
// เอาทคุกคค่าอาเรยต์ numbers มาคบูณกลับ 10
}
function forEachLoopTemp() {
var celciusArray = [ 0 , 13 , 19 , 11 , 24 , 29 , 34 , 17 , 4 ] ;
var farenheitArray = [] ; // เตรขียมอาเรยต์วค่างๆไวช้เกก็บผลลลัพธต์
celciusArray.forEach(function(celciusTemp) {
// เรขียกใชช้ฟฟังกต์ชลัริ่น convertCtoF(t)
// โดยสค่งสมาชรกไปประมวลผลทขีละตลัว
var farenheitTemp = convertCtoF(celciusTemp) ;
// เกก็บผลลลัพยต์ไวช้ในอาเรยต์วค่างๆทขีเริ่ ตรขียมไวช้
farenheitArray.push(farenheitTemp) ;
});
Logger.log('Celcius Array:') ; // ดบูผลทขีริ่ Logs –------------- > [ 01 ]
Logger.log(celciusArray) ; // ดบูผลทขีริ่ Logs –------------- > [ 02 ]
Logger.log('Farenheit Array') ; // ดบูผลทขีริ่ Logs –------------- > [ 03 ]
Logger.log(farenheitArray) ; // ดบูผลทขีริ่ Logs –------------- > [ 04 ]
}
function convertCtoF(t) {
return (t * 9/5) + 32 ;
}
ผล
Logs
[01] Celcius Array:
[02] [0.0, 13.0, 19.0, 11.0, 24.0, 29.0, 34.0, 17.0, 4.0]
[03] Farenheit Array
[04] [32.0, 55.4, 66.2, 51.8, 75.2, 84.2, 93.2, 62.6, 39.2]
13.6. reduce()
JavaScript Array reduce() Method
https://www.w3schools.com/jsref/jsref_reduce.asp
Javascript reduce example
https://appdividend.com/2018/10/16/javascript-reduce-example-tutorial/
reduce เปป็นเมถอด ทคีงื่ใชค้วนลยปเพงงื่อนสสำสมสำชพิกในอสำเรยลมสำประมวลผลดค้วยฟฝังกลชลังื่น เพงงื่อลดสมสำชพิกในอสำ
เรยล โดยจะคงนผลลลัพธลสถดทค้สำยมสำตลัวเดคียว
พสำรสำมพิเตอรล
Parameter Description
(จกาเปป็น) ฟฟังกต์ชลัริ่นทขีใริ่ ชช้รลันสมาชรกในอาเรยต์แตค่ละตลัว
Argument Description
(จกาเปป็น) คค่า initialValue(หากมขีการกกาหนด) หรมือ
function(total,currentValue, total เปป็นคค่าทขีริ่คมืนกลลับมากค่อนหนช้า โดยฟฟังกต์ชนลัริ่
index,arr)
currentValue (จกาเปป็น) คค่าของสมาชรกอาเรยต์ตลัวปฟัจจคุบนลั
currentIndex (ไมค่บลังคลับ) ดรรนขีลกาดลับของสมาชรกอาเรยต์ตลัวปฟัจจคุบลัน
arr (ไมค่บลังคลับ l) อาเรยต์ทขีริ่ใชลัเกก็บผลลลัพธต์
initialValue (ไมค่บลังคลับ) คค่าทขีริ่สค่งใหช้กบลั ฟฟังกต์ชลัริ่น ทขีใริ่ ชช้เปป็นคค่าเรรริ่มตช้น
ดยกสำรวนลยปของโคค้ดขค้สำงตค้น
ลยปครตันี้งททที่ total currentValue return
1 0 5 5
2 5 10 15
3 15 15 30
4 30 20 50
5 50 25 75
ดยกสำรวนลยปของโคค้ดขค้สำงตค้น
ลยปครตันี้งททที่ total value return total.concat(value)
1 [] - initialValue [1, 2, 3] [1, 2, 3]
2 [1, 2, 3] [4, 5, 6] [1, 2, 3, 4, 5, 6]
3 [1, 2, 3, 4, 5, 6] [7, 8, 9] [1, 2, 3, 4, 5, 6, 7, 8, 9]
ดยกสำรวนลยปของโคค้ดขค้สำงตค้น
ลยป total+= amount amount index array.length-1 return
1 0+11 11 0 3-1 11
2 11+21 21 1 3-1 33
3 33+16 16 2 3-1 16 (48/3)
ดยกสำรวนลยปของโคค้ดขค้สำงตค้น
ลยป 1 data = {}
pound = 11
return = data[11]=(data[11] || 0) +1 → data = {11:1}
ลยป 2 data = {11:1}
pound = 21
return = data[21]=(data[21] || 0) +1 → data = {11:1, 21:1}
ลยป 3 data = {11:1, 21:1}
pound = 16
return = data[16]=(data[16] || 0) +1 → data = {11:1, 21:1, 16:1}
ลยป 4 data = {11:1, 21:1, 16:1}
pound = 19
return = data[19]=(data[19] || 0) +1 → data = {11:1, 21:1, 16:1, 19:1}
ลยป 5 data = {11:1, 21:1, 16:1, 19:1}
pound = 46
return = data[46]=(data[46] || 0) +1 → data = {11:1, 21:1, 16:1, 19:1, 46:1}
ลยป 6 data = {11:1, 21:1, 16:1, 19:1, 46:1}
pound = 29
return = data[29]=(data[29] || 0) +1 → data = {11:1, 21:1, 16:1, 19:1, 46:1, 29:1}
ลยป 7 data = {11:1, 21:1, 16:1, 19:1, 46:1, 29:1}
pound = 46
return = data[46]=(data[46] || 0) +1 → data = {11:1, 21:1, 16:1, 19:1, 46:2, 29:1}
ลยป 8 data = {11:1, 21:1, 16:1, 19:1, 46:2, 29:1}
pound = 19
return = data[46]=(data[46] || 0) +1 → data = {11:1, 21:1, 16:1, 19:2, 46:2, 29:1}
ลยป 9 data = {11:1, 21:1, 16:1, 19:2, 46:2, 29:1}
pound = 21
return = data[21]=(data[21] || 0) +1 → data = {11:1, 21:2, 16:1, 19:2, 46:2, 29:1}
return สถดทค้สำยคงอ {11:1, 21:2, 16:1, 19:2, 46:2, 29:1}
function add_member_to_object(){
var count = { 111:1 , 222:2 } ; // Properties : Value เปป็นตลัวเลขทลันี้งคบูค่
count[333] = 3 ; // เพรริ่ม Property และ Value ตลัวใหมค่ ใหช้กลับตลัวแปร Object
Logger.log(count) ; // { 111:1 , 222:2 , 333:3}
}
หมสำยเหตถุ 2 :
ถค้ สำ คยู่สำ ของตลัว แปรยลัง ไมยู่ มคี (undefined) หรง อ ยลั ง ไมยู่ ถยก ระบถ หสำกนสสำ ไปคสสำ นวณจะเกพิ ด Error กก็คง อ NaN
สสำมสำรถปป้องกลันไดค้โดยใชค้ ||(หรรอ) เพงงื่อสรค้สำงเงงงื่อนไขกสำรคสสำนวณ เชยู่น a || 5 ถค้สำ a เปป็น undefind จะนสสำ 5 มสำใชค้
คสสำนวณแทน ตลัวอยยู่สำงตสำมโคค้ดตยู่อไปนคีซ
function pipe_in_(){
var A = 1, B = 2;
var M = -1, N = 0 ;
var X = null, Y = undefined ;
var Z ;
Logger.log((A || 0) + 1) ; // 1+1 =2
Logger.log((B || 0) + 1) ; // 2+1 =3
Logger.log((M || 0) + 1) ; // 3+1 =0
Logger.log((N || 0) + 1) ; // 0+1 =1
Logger.log((X || 0) + 1) ; // 0(null)+1 =1
Logger.log((Y || 0) + 1) ; // 0(undefined)+1 =1
Logger.log(null + 1) ; // 1
Logger.log(undefined + 1) ; // NaN
Logger.log(Z + 1) ; // NaN
}
ผล
Logs
[
{ "Id": "001", "qty": 3 },
{ "Id": "002", "qty": 2 },
{ "Id": "003", "qty": 4 }
]
รยปแบบกสำรใชค้งสำน
// แบบปกตร
[element0, element1, ..., elementN]
// แบบใชช้ Constructor
new Array(element0, element1[, ...[, elementN]])
// แบบใชช้ Constructor - ระบคุจกานวนสมาชรก
new Array(arrayLength)
ตลัวอยยู่สำง
let fruits = new Array('Apple', 'Banana') ;
console.log(fruits.length) ; // 2
console.log(fruits[0]) ; // Apple
รยปแบบกสำรใชค้งสำน
Array.prototype.name = value
Array.prototype.myUcase = function() {
for (i = 0 ; i < this.length ; i++) {
this[i] = this[i].toUpperCase() ;
}
};
กสำรเรคียกใชค้งสำน
14.4. Array.prototype.slice.call(arguments)
Array.prototype.slice.call(arguments)
https://medium.com/@andrewsburke/array-prototype-slice-call-arguments-a94b04e74a4
ตลัวอยยู่สำง
function mysum() {
let argarr = Array.prototype.slice.call(arguments);
return argarr.reduce( (total,item) => total+item ) ;
}
function callpoint(){
const x = mysum(1, 123, 500, 115, 44, 88) ;
Logger.log(x) // 871
}
เมงงื่อเตรคียมขค้อมยลใน Google Sheet พรค้อมแลค้ว ใหค้สรค้สำงโปรเจก็ค Google Apps Script แบบฝฝังไฟลล จสำก
นลัซ นพพิ ม พล โ คค้ ด ตยู่ อ ไปนคีซ ล งไป โดยโคค้ด นคีซ จ ะจลั บ ขค้ อ มย ล ขค้ สำ งตค้ น มสำใสยู่ อ สำเรยล แ ลค้ ว Logs ดย เพงงื่ อ ดย วยู่ สำ Google Apps
Script จลับขค้อมยลมสำเปป็นอสำเรยลอยยู่สำงไร
function getData() {
// จลับชขีนี้ททขีริ่เปปิดไวช้ ในไฟลต์ Google Sheet ใสค่ตลัวแปร sheet
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
// จลับขช้อมบูลในเรช้นจต์ A2:A5 - 1 คอลลัมนต์
var d1Col = sheet.getRange("A2:A5").getValues() ;
// จลับขช้อมบูลในเรช้นจต์ B1:D1 - 1 แถว
var d1Row = sheet.getRange("B1:D1").getValues() ; // จลับขช้อมบูล 1 แถว
Logger.log(d1Col) ; // ดบูผลทขีริ่ Logs ตค่อ –------ > [ 01 ]
Logger.log(d1Row) ; // ดบูผลทขีริ่ Logs ตค่อ –------ > [ 02 ]
}
ผล
Logs
[ 01 ] [[AAA], [BBB], [CCC], [DDD]] // 1 คอลลัมนต์ - เปป็นอาเรยต์ 2 มรตร
[ 02 ] [[XXX, YYY, ZZZ]] // 1 แถว - เปป็นอาเรยต์ 2 มรตร
เรสำสสำมสำรถจลับขค้อมยลทลัซงหมดไปใสยู่ในตลัวแปรอสำเรยลไดค้ดลังนคีซ
function getData() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
var data = sheet.getRange(1 , // เรรริ่มแถวทขีริ่
1
1, // เรรริ่ม
คอลลัมนต์ A
sheet.getLastRow() , // 4 แถว
sheet.getLastColumn()).getValues() ;// 2 คอลลัมนต์
Logger.log(data) ; // ดบูผลทขีริ่ Logs ตค่อ –------ > [ 01 ]
}
Logs
[ 01 ] [[มะนาว, 12.0], [มะพรค้าว, 35.0], [สค้มโอ, 45.0], [แตงโม, 50.0]]
function setData() {
var Arr2dim = [
["Linda", 27] , // Arr2dim[0] กก็คอมื อาเรยต์เสช้นนขีนี้
["Lisa", 35] , // Arr2dim[1] กก็คมือ อาเรยต์เสช้นนขีนี้
["John", 42] // Arr2dim[2] กก็คอมื อาเรยต์เสช้นนขีนี้
];
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2") ;
// เรรริ่มทขีริ่ D1 3 แถว 2 คอลลัมนต์
var data = sheet
.getRange(1, 4, Arr2dim.length, Arr2dim[0].length)
.setValues(Arr2dim) ;
}
15.3.ก.) พตัฒนาการททที่ 1
จลับขค้อมยลใน Google Sheet มสำ Log ดยกยู่อน เพงงื่อดยวสำยู่ จลับขค้อมยลมสำถยกหรงอเปลยู่สำ
function calcColumn() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2") ;
var data = sheet.getRange(2,1, sheet.getLastRow()-1,
sheet.getLastColumn()).getValues() ;
Logger.log(data) ; // ดบูผลทขีริ่ Logs -------- >
}
ผล
Logs
[[1.0, LibreOffice Calc, 7600.0], [2.0, LibreOffice Base, 9000.0], [3.0, Google Apps,
7600.0], [4.0, Google Sheet, 7600.0], [5.0, Google Apps Script, 9000.0]]
function calcColumn() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2") ;
var data = sheet.getRange(2,1, sheet.getLastRow()-1,sheet.getLastColumn()).getValues() ;
/* [ // คสานวณคอลตัมนลนทนี้
[1.0, LibreOffice Calc, 7600.0],
[2.0, LibreOffice Base, 9000.0],
[3.0, Google Apps, 7600.0],
[4.0, Google Sheet, 7600.0],
[5.0, Google Apps Script, 9000.0] ] */
var calcData = data.map(function(row){
// คกานวณเฉพาะคอลลัมนต์ทขีริ่ 3 – หารดช้วย 8 แลช้วเกก็บคค่าไวช้ในตลัวแปร
var cost = row[2]/8 ;
// return [ row[0] , row[1] , cost ] ;
// ครนกลลับทลันี้งหมด โดยคกานวณบางคอลลัมนต์
return [cost] ; // คมืนกลลับเฉพาะคอลลัมนต์ทคขีริ่ กานวณ
}) /* จบ map / ;
// Logger.log(calcData);
/* [ มท 5 แถว 1 คอลตัมนล
[950.0],
[1125.0],
[950.0],
[950.0],
[1125.0] ] */
// คอลลัมนต์สคุดทช้ายของชขีนี้ท+1 จกานวนสมาชรก จกานวนสมาชรกตลัวแรก(ในอาเรยต์)
// 2 4 5 1
sheet.getRange(2, sheet.getLastColumn()+1, calcData.length, calcData[0].length)
.setValues(calcData) ;
}
ผล – ดยคอลลัมนล D
ผล - กรองบรรทลัดทคีงื่มคีเซลลลวสำยู่ งทพิซง
ขลัซนตอน
ลยป d uniqueDays uniqueDays.indexOf(d) uniqueDays.push(d)
1 37 [] -1 (false) [37]
2 39 [37] -1 (false) [37, 39]
3 42 [37, 39] -1 (false) [37, 39,42]
4 46 [37, 39,42] -1 (false) [37, 39, 42, 46]
5 46 [37, 39, 42, 46] 3 (true) [37, 39, 42, 46]
6 11 [37, 39, 42, 46] -1 (false) [37, 39, 42, 46, 11]
7 33 [37, 39, 42, 46, 11] -1 (false) [37, 39, 42, 46, 11, 33]
8 11 [37, 39, 42, 46, 11, 33] 4 (true) [37, 39, 42, 46, 11, 33]
15.8.ก.) วพิธทททที่ 1
const arr = [
[ 1 , 'A' ] ,
[ 2 , 'B' ] ,
[ 3 , 'C' ] ,
[ 1 , 'A' ] ,
[ 1 , 'A' ] ,
[ 2 , 'B' ]
];
var uniques = [] ;
var itemsFound = {} ;
for(let i = 0, l = arr.length ; i < l ; i++) {
var stringified = JSON.stringify(arr[i]) ;
if(itemsFound[stringified]) { continue ; }
uniques.push(arr[i]) ;
itemsFound[stringified] = true ;
}
Logger.log(uniques) ; // [[1.0, A], [2.0, B], [3.0, C]]
โคค้ด
let x = [["A", 2], ["B", 4], ["A", 2]] ;
var unique = x.map( ar => JSON.stringify(ar) )
// [ '[A,2]', '[B,4]', '[A,2]' ]
.filter(( itm, idx, arr) => arr.indexOf(itm) === idx )
// [ '[A,2]', '[B,4]' ]
.map( str => JSON.parse(str)) ;
// [ [ A, 2 ], [ B, 4 ] ]
Logger.log(unique) ;
const sum = unique[0][1] + unique[1][1]
console.log(sum) ; // 6
ตลัวอยยู่สำง
// อาเรยต์กอช้ นทขีริ่ 1 – ถบูกเปรขียบเทขียบ - จลับจากเรก็นจต์ใน Google Sheets 1 แถว
//
var arrData2Dims = [[ 'D' , 'C' , 'X' , 'B' ]] ;
var arrData1Row = arrData2Dims[0] ; // [D,C,X,B]
// อาเรยต์กอช้ นทขีริ่ 2 – ใชช้เปรขียบเทขียบ - จลับจากเรก็นจต์ใน Google Sheets 1 เซลลต์
//
var findArr = [[ 'X' ]] ;
var findVal = findArr[0][0] ; // X
var filterOut = [] ;
arrData1Row.forEach(function(item){
if(item != findVal){
filterOut.push(item);
}
}) ; // Close - forEach
Logger.log(filterOut) ; // ผล : [ D, C, B ]
ตลัวอยยู่สำง
var arrFrm = [ 1 , 2 , 7 ] ;
var arrFull = [ 0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ] ;
var filOut = [] ;
arrFull.forEach(function(a){
if(arrFrm.indexOf(a) == -1 ){
filOut.push(a) ;
}
}) ;
Logger.log(filOut) ; // ผล : [0.0 , 3.0 , 4.0 , 5.0 , 6.0 , 8.0 , 9.0]
หมายเหตจุ
ถค้สำจะเกก็บตลัวซสซสำบรรทลัด ตยู่อไปนคีซแกค้เปป็น
if(arrFrm.indexOf(a) == -1 ) → if(arrFrm.indexOf(a) != -1 )
ผล
ผล
หมายเหตจุ 1
กรณทกรองแลค้ว ไมม่มทบรรทรดไหนผม่สำนกสำรกรองเลย ใหค้เรสำใชค้ if ตรวจสอบดค้วย ไมยู่เชยู่นนลัซน โคค้ดจะ Error
ในขลัซนตอนเขคียนผลกสำรกรองกลลับไปทคีงื่ Google Sheets ใหค้แกค้โคค้ดเปป็นดลังตยู่อไปนคีซ
ผล – กรองโดยเชงงื่อมเงงงื่อนไขแบบ Or
function Lookup_return_multiple(){
var array = [ "test234", "test9495", "test234", "test93992", "test234" ] ;
var newArrData = [] ;
for ( i=0 ; i<array.length ; i++) {
if (array[i].indexOf("test234") >= 0 ) {
newArrData.push(array[i]) ;
}
}
Logger.log(newArrData) ; // [test234, test234, test234]
}
function Lookup_return_multiple_using_forEach(){
var array = [ "test234", "test9495", "test234", "test93992", "test234" ] ;
var newArrData = [] ;
array.forEach(function(item,i){
if (array[i].indexOf("test234") >= 0 ) {
newArrData.push(array[i]) ;
} ; // Close - if
}) ; // Close - forEach
Logger.log(newArrData) ; // [test234, test234, test234]
}
ผล
Logs
[01] [ [Linda, 27.0, Bangkok] , [Lisa, 35.0, Nontaburi] , [John, 42.0, Petchaboon] ]
[02] [ Linda, Lisa, John ]
โคค้ด
var arr2dim = [ ["Linda", 27, "Bangkok" ] ,
["Lisa", 35, "Nontaburi" ] ,
["John", 42, "Petchaboon" ] ] ;
var arr2ad = [ ["X" , "A"] ,
["Y" , "B"] ,
["Z" , "C"] ] ;
var comArr = [arr2dim[0] , arr2ad[0]] // [[Linda, 27.0, Bangkok], [X, A]]
var comArr2 = [...arr2dim[0] , ...arr2ad[0]] // [Linda, 27.0, Bangkok, X, A]
Logger.log(comArr) ;
Logger.log(comArr2) ;
var comArr3 = [] ;
for(let i = 0 ; i < arr2dim.length ; i++){
comArr3.push([...arr2dim[i] , ...arr2ad[i]]) ;
}
Logger.log(comArr3) // ดบูผลทขีริ่ Logs ------------------ >
ถค้สำเปป็น Apps Script หรงอ Javascript รถยู่นเกยู่สำจะทสสำยสำก แตยู่พอเปป็น Chrome V8 หรงอ Javascript ES6
กสำรหสำคยู่สำสยงสถดตสงื่สำสถดในอสำเรยลจะกลสำยเปป็นเรงงื่องงยู่สำย โดยใชค้ Spread operator (3 จจุด)
ตลัวอยยู่สำง
const array = [ 15, 21, 3, 14, 54 ] ;
Logger.log(Math.max(...array) ) ; // 54
Logger.log(Math.min(...array) ) ; // 3
ตลัวอยยู่สำง
var len = 5 ;
var x = new Array(len) ;
Logger.log(x) ; // ดบูผลทขีริ่ Logs ------------------- > [ 01 ]
var y = new Array(len).fill(0) ;
Logger.log(y) ; // ดบูผลทขีริ่ Logs ------------------- > [ 02 ]
var z = Array.from({ length: 4 })
Logger.log(z) ; // ดบูผลทขีริ่ Logs ------------------- > [ 03 ]
var w = Array.from({ length: 4 }).map((mem, i) => i)
Logger.log(w) ; // ดบูผลทขีริ่ Logs ------------------- > [ 04 ]
ผล
Logs
[ 01 ] [null, null, null, null, null]
[ 02 ] [0.0, 0.0, 0.0, 0.0, 0.0]
[ 03 ] [null, null, null, null ]
[ 04 ] [0.0, 1.0, 2.0, 3.0]
Logger.log(sumCols) ;
// [10.0, 79.0, 681.0, 770.0]
//===============================================
// แทรกไวช้แถวลค่างสคุด
arr.push(sumCols)
Logger.log(arr) ;
// [[1.0, 22.0, 111.0, 134.0],
// [2.0, 15.0, 125.0, 142.0],
// [3.0, 12.0, 215.0, 230.0],
// [4.0, 30.0, 230.0, 264.0],
// [10.0, 79.0, 681.0, 770.0]]
}
โคค้ด
function callFil(){
var indexlist = [0, 2, 3] ;
var arr2dims = [ // 0 1 2 3 4
['a', 'b', 'c', 'd', 'e'] ,
['m', 'n', 'o', 'p', 'q'] ,
['t', 'u', 'v', 'w', 'x'] ]
Logger.log(shortenedCol(arr2dims,indexlist)) ;
}
function shortenedCol(arr2dims, indexlist) {
return arr2dims.map(function(array) {
return indexlist.map(function(idx) {
return array[idx] ;
}) ;
}) ;
}
ผล
Logs
// 0 2 3
[ [a, c, d ],
[m, o, p ],
[t, v, w ] ]
ทดสอบ เพงงื่อควสำมเขค้สำใจทคีงื่งยู่สำยขถึซน
var arr2dims = [ // 0 1 2 3 4
['a', 'b', 'c', 'd', 'e'] ,
['m', 'n', 'o', 'p', 'q'] ,
['t', 'u', 'v', 'w', 'x'] ]
var newarr = arr2dims.map( row => [ row[0], row[2], row[3]] )
Logger.log(newarr) ;
ตรวอยม่สำงวรตถถุรถยนตพ์
กสำรเรคียกใชค้งสำนเซอรลวพิส เพงงื่อเขค้สำไปควบคถมวลัตถถหรงอคลสำส เพงงื่อใหค้เขค้สำใจงยู่สำย ขอยกตลัวอยยู่สำง วรตถถุรถยนตพ์
ตลัวอยยู่สำงตยู่อไปนคีซ เรสำจะสลังื่งงสำนใหค้รถยนตลขลับทคีงื่ควสำมเรก็ว 80 ซถึงื่งสสำมสำรถเขคียนเปป็นโคค้ดไดค้ดลังตยู่อไปนคีซ
// Object.Object.Method(Value)
รถยนตล.คตันเรยู่ง.เหยทยบคตันแรยู่ง(80) ;
ตรวอยม่สำงกสำรเรทยกใชค้คลสำส Math
คลสำส Math เปป็น Built-in Services ของ Google ทคีงื่มคีกสำรใชค้งสำนเหมงอนคลสำส Math ของ JavaScript
ตลัวอยยู่สำงโคค้ดตยู่อไปนคีซ เรคียกใชค้ Method ชงงื่อ pow() ของคลสำส Math เพงงื่อคสสำนวณเลขยกกสสำลลัง จสำกนลัซนเกก็บคยู่สำไวค้ใน
ตลัวแปร numPow
Math object ของ JavaScript
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math
DocumentApp.create('New document')
.getBody()
.appendParagraph('New paragraph.') ;
หมสำยเหตถุ : ทคีงื่มสำของโคค้ดขค้สำงตค้นกก็คงอ
https://developers.google.com/apps-script/reference/document/body#getattributes
getAttributes() เปป็นเมถอดในคลสำส Body/Text ใชค้จลับ Attributes ของวลัตถถ โดยจะคงนคยู่สำกลลับมสำเปป็น
Enum Attribute
16.5. Interfaces
Interfaces เปป็นบรพิกสำรหรงอเปป็นสยู่วนทคีงื่บอกวยู่สำวลัตถถนลัซนๆ สสำมสำรถทสสำอะไรไดค้บค้สำง หรงอเปป็นกลถยู่มของ เมถ
ถอด(Methods)ของวลัตถถ Interfaces มลักใชค้เรคียกเมถอดรวมๆของวลัตถถ
ยกตรวอยม่สำง
องคลประกอบในสยู่วน Body ในเอกสสำร Google Docs มคีตสำมภสำพ
โคค้ดตยู่อไปนคีซ จลับ Elements ใน Body ของเอกสสำร Google Docs มสำ Log ดยวยู่สำมคีชนพิดเปป็นอะไรบค้สำง
function testElem() {
var body = DocumentApp.getActiveDocument().getBody();
var elemInBody = body.getNumChildren();
for(var x = 0 ; x < elemInBody ; x++){
Logger.log(body.getChild(x).getType());
};
}
หมสำยเหตถุ
ดยรสำยละเอคียดเพพิงื่มเตพิมไดค้จสำกลพิงคลตยู่อไปนคีซ
getType() - Method ใน Interface Element
https://developers.google.com/apps-script/reference/document/element#gettype
ใชค้จลับชนพิดของ ELement คงนคยู่สำกลลับมสำเปป็น Enum ElementType
Enum ElementType – แจกแจงชนรดของ Elements
https://developers.google.com/apps-script/reference/document/element-type.html
17.2. log()
log() เปป็นเมถอดทคีงื่ใชค้เขคียนผลจสำกกสำรรลันโคค้ด ใหค้อยยยู่ในรยปแบบขค้อควสำมลงในหนค้สำตยู่สำง Console (ขณะอยยยู่
ในหนค้สำโปรเจก็ค Google Apps Script กด <Ctrl><Enter> เพงงื่อเปปิด Logs )
สสำมสำรถใชค้ %s ใสยู่ลงไปใน log() เพงงื่อรลับคยู่สำจสำกตลัวแปรมสำใสยู่ หรงอ จะใสยู่ตลัวแปรตรงๆลงไปใน log() กก็ไดค้
แตยู่กก็จะมคีควสำมแตกตยู่สำงกลัน ใหค้สลังเกตถจสำกตลัวอยยู่สำงตยู่อไปนคีซ
ตรวอยม่สำง
var groups = GroupsApp.getGroups();
Logger.log('You are a member of %s Google Groups.', groups.length);
ผล
อทกตรวอยม่สำง
var values = [1,2,3];
Logger.log('Values is %s' , values) ; // พรมพต์ใน Logger : Values is [1.0, 2.0, 3.0]
Logger.log('Values is' + values) ; // พรมพต์ใน Logger : Values is 1,2,3
ผล
Log
[01] Longger : 11
[02] console : 11
[03] label: 6ms
ผล
function onEdit(e){
var range = e.range ;
range.setNote('Last modified: ' + new Date()) ;
}
ผล
ทคีงื่หนค้สำ Triggers ตสำมภสำพ คลพิกทคีปงื่ จุปุ่ม Add Trigger จะปรสำกฎหนค้สำตยู่สำงมสำใหค้ตลัซงคยู่สำ Trigger ตสำมภสำพถลัด
ไป
ขรรั้นตอน
1. (ทคีงื่ไฟลลหลลักทคีงื่เรสำสรค้สำงโปรเจก็ค Google Apps Script) สรค้สำงเวอรพ์ชรที่นใหค้กรบโปรเจซ็ค
1.1 ทคีงื่โปรเจก็ค Google Apps Script ไปทคีงื่เมนย File → Manage Versions
1.2 (ทคีงื่หนค้สำตยู่สำง Manage Versions ) บลันทถึกเวอรลชลังื่น
ก.) ตลัซงชงงื่อเวอรลชลังื่น อะไรกก็ไดค้ เชยู่น 1.0 Begin
ข.) คลพิกปถปุ่ม Save new version จะไดค้เวอรลชลังื่นของโปรเจก็คตสำมภสำพ
ค.) คลพิกปถปุ่ม OK
ตรวอยม่สำงททที่ 1
function myFunction() {
// เรขียกใชช้ฟฟังกต์ชลัริ่น onOpen() จาก Resource WKPowerScript ทขีริ่ลรงคต์กลันอยบูค่
WKPowerScript.onOpen();
}
ตรวอยม่สำงททที่ 2
// ฟฟังกต์ชนลัริ่ นขีนี้ สค่งผค่าน Agrument และ รลับคค่ากลลับมา
function BAHTTEXT(number) {
return WKPowerScript.BAHTTEXT(number);
}
หมสำยเหตถุ
ปฝัจจถบลัน Google ไดค้สรค้สำงฟฝังกลชลังื่น BAHTTEXT ใน Google Sheets ใหค้เปป็นฟฝังกลชลังื่น Built-in แลค้ว สสำมสำรถ
เรคียกใชค้ไดค้เลย ไมยู่ตค้องเขคียนสครพิปตลอกคี แลค้ว
19.1.ง.) สรจุป
บททขีริ่ 19 : การใชช้โปรเจก็ค Google Apps Script ในไฟลต์อมืริ่น 229
วพิธคีกสำรใชค้งสำนโปรเจก็ค Google Apps Script 1 โปรเจก็คหลสำยไฟลล ตสำมทคีงื่ไดค้อธพิบสำยในขค้อนคีซ มคีขค้อดคีทคีงื่เรสำ
สสำมสำรถเขคียนโคค้ดไดค้ในโปรเจก็คหลลักตลัวเดคียว แลค้วโปรเจก็คองงื่นๆสสำมสำรถเรคียกใชค้โคค้ดจสำกโปรเจก็คหลลักไดค้
อยยู่สำงไรกก็ดคี ไฟลพ์ททที่เรทยกใชค้กซ็ตค้องสรค้สำงโปรเจซ็คอยมูม่ดท
หสำกโปรเจก็คของเรสำ ยยสเซอรลจสสำเปป็นตค้องใชค้โปรเจก็ค Google Apps Script กลันเปป็นจสสำนวนมสำก และไมยู่อยสำก
ยถยู่งยสำกกลับกสำรสรค้สำงโปรเจก็คอคีก ทสำงออก กก็คงอ กสำรสรค้สำง Addon