บททีข่ท 8
วตลั ถนถ าน่ สนใจ
8.1. วลัตถุถ Set
Set
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set
Set() constructor
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/Set
วตัล ถถ Set ใช้เค กกบ็ คยู่สำทคงีไื่ มูย่ซสสซ ำกลัน วตลั ถถ Set เปนป็ กคอ้ นของคูสย่ ำ เรสำจถึงสสำมสำรถวนลยปเขส้ค ำไปขคส้ ำงในไดค้
ตวร อยส่ม ำง – กสำรใชค้ Set ทเคืีง่ กงีื่ยค วขอค้ งกัลบอสำเรยล
let myArray = ['value1', 'value2', 'value3']
// ใช้ช Set constructor สร้ชางวลตั ถุค Set จากอาเรย์ต
let mySet = new Set(myArray)
mySet.has('value1') // returns true
// ใช้ช Spread operator แปลงจากวลตั ถุค Set เป็นป อาเรยต์
Logger.log([...mySet])
ตวร อยสม่ ำง – ใช้ค Set เก็กบเฉพสำะตวัล ท่คีงื Unique
const numbers = [2,3,4,4,2,3,3,4,4,5,5,6,6,7,5,32,3,4,5]
Logger.log([...new Set(numbers)]) // [2, 3, 4, 5, 6, 7, 32] - แปลงเป็ปนอาเรย์ตในขนัีลน้ ตอนเดีขยว
8.2. วัลตถถุ WeakSet
WeakSet
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet
WeakSet เปปน็ วตัล ถถท่เีงคื ก็กบวตัล ถอกคี ทคี หรงอเปปน็ กคอ้ นของวตัล ถถ เชู่ยนเดยีค วกนัล Set แตูย่ละวตัล ถอถ ยใยู่ น WeakSet
อสำจมเคี พยีค งตลวั เดคียว ทถกวตลั ถใถ นก้คอน WeakSet ก็ก Unique เชู่ยนเดคยี วกนลั
ควสำมแตกตู่ยสำงระหวสยู่ ำง Set และ WeakSet
WeakSet เป็ปนกค้อนของวตลั ถถเทยสู่ ำนลซนั (มสคี มสำชิกพ เป็ปนวตลั ถถเทยูส่ ำนัซนล ) ไมู่เย หมงอนกบัล Set ทืีค่มง คคี ูย่สำเปนป็ ชนพิดอะไร
ก็กได้ค
WeakSet นลซัน Weak ตสำมช่งอื กสำรอ้คสำงอิพงทืงคว่ี ตลั ถใถ น WeakSet นัลซนถอง ไว้คไดคอ้ ู่ยอนแรง ถค้สำไม่มูย กคี สำรอส้ค ำงอพิงใดๆ
ถงถึ วัตล ถทถ ่ีอคงื ยใูย่ น WeakSet วตัล ถถเหลูส่ย ำนลซนั จะเป็ปนเหมงอนขยะ
หมสำยเหตุถ
เมถอดของ WeakSet กก็คอง add, has และ delete ทสส ำงสำนแปลกๆ หรอง ไมู่ทย สสำงสำนเลยใน Apps Script
ไมยเู่ หมงอนกัลบใน Javascript
102 หลกลั การเขยขี นโปรแกรม Google Apps Script โดย วสันล ต์ต คณคุ ดลร กเศวต ([email protected])
ตวลั อยยูส่ ำง
const ws = new WeakSet() ;
const foo = {} ;
const bar = {} ;
ws.foo = foo ; // ws.add(foo) ; - ใช้ชแบบนี้นไข มค่ได้ช ใชชไ้ ด้ชแตค่ใน Javascript
ws.bar = bar ; // ws.add(bar) ; - ใชแ้ช บบนไ้ีขน มไ่ค ดช้ ใช้ไช ด้ชแต่ใค น Javascript
Logger.log(ws) ; // {bar={c=3.0}, foo={b=2.0, a=1.0}}
ws.has(foo) ; // true
ws.has(bar) ; // true
ws.delete(foo) ; // removes foo from the set
ws.has(foo) ; // false, foo has been removed
ws.has(bar) ; // true, bar is retained
ข้คสำงต้คน ใหค้โนคต้ ไวค้วู่ยสำ foo !== bar แมค้ทัลซง 2 จะเป็ปนวัลตถถว่ยูสำงเหมงอนกลัน แตู่ยไมใยู่ ช่ยูวลตั ถถทคงี่ืเหมงอนกัลน ฉะนซัลน
ทงลซั 2 จงึถ ถยกเพมิ่ืงพ ลงใน WeakSet ได้ค
8.3. วลัตถถุ Map
Map
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
Map() constructor
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/Map
วตลั ถถ Map เก็กบคู่ขย อง key-value ไว้ค และจสส ำลสส ำดบลั ดงซัล เดมพิ ของคยคี ไล ว้คด้ควย
เรสำสสำมสำรถวนลยปเขสำไปในวลัตถถ Map ได้คโดย for/of และคงนคยู่สำกลัลบมสำเป็ปนอสำเรยลของ [key, value] ใน
แตยู่ละลยป
Object เหมงอนกลบั Map ทงซลั 2 ใหคเ้ รสำสสำมสำรถกสส ำหนด Keys, รบลั Values จสำกคยีค ล, ลบ Keys และตรวจ
สอบวส่ยู ำ Key เกก็บอะไรไวหค้ รอง เปลสยู่ ำ ดวค้ ยเหตถผลดัลงกลสู่ย ำว Objects ถยกใช้เค หมงอนกลับ Map
ตรวอยส่ม ำง (ใชคง้ สำนไม่ไยู ดคใ้ น Apps Script)
// ใช้ชงานเหมมือน Object เหมมือนจะไดช้ แตค่ไม่คได้ช ...
let wrongMap = new Map()
wrongMap['bla'] = 'blaa' ;
wrongMap['bla2'] = 'blaaa2' ;
console.log(wrongMap) // { bla: 'blaa', bla2: 'blaaa2' }
// แต่ค…. ทาก งานไม่เค หมือม นกบลั ทคร่ิขี าดไว้ช
wrongMap.has('bla') // false - ทาก งานผดร ปกตร
wrongMap.delete('bla') // false - ทาก งานผดร ปกตร
console.log(wrongMap) // { bla: 'blaa', bla2: 'blaaa2' }
บทที่ขิร 8 : วลัตถคุนคา่ สนใจ 103
let myMap = new Map() // Map { 'bla' => 'blaa', 'bla2' => 'blaa2' }
myMap.set('bla','blaa')
myMap.set('bla2','blaa2')
Logger.log(myMap)
myMap.has('bla') // true
myMap.delete('bla') // true
Logger.log(myMap) // Map { 'bla2' => 'blaa2' }
ตวร อย่มสำง (ใชง้ค สำนไดค้ใน Apps Script)
let myMap = new Map() // myMap.set(key, value)
myMap.set(0, 'zero')
myMap.set(1, 'one')
for (let [key, value] of myMap) {
Logger.log(key + ' = ' + value)
}
// 0 = zero
// 1 = one
for (let key of myMap.keys() ) {
Logger.log(key)
}
// 0
// 1
for (let value of myMap.values()) {
Logger.log(value)
}
// zero
// one
for (let [key, value] of myMap.entries()) {
Logger.log(key + ' = ' + value)
}
// 0 = zero
// 1 = one
104 หลัลกการเขียข นโปรแกรม Google Apps Script โดย วสลันต์ต คณคุ ดลร กเศวต ([email protected])
8.4. วตลั ถุถ WeakMap
WeakMap
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap
วตลั ถถ WeakMap เป็ปนก้อค นของค่ยู Key-Value ซง่งืึถ Keys ถยกอส้ค ำงอิพงไดแ้ค บบอูย่อนแอ
const wm1 = new WeakMap() ,
wm2 = new WeakMap() ,
wm3 = new WeakMap() ;
const o1 = {} ,
o2 = function() {} ,
o3 = window ;
wm1.set(o1, 37) ;
wm1.set(o2, 'azerty') ;
wm2.set(o1, o2) ; // a value can be anything, including an object or a function
wm2.set(o3, undefined) ;
wm2.set(wm1, wm2) ; // keys and values can be any objects. Even WeakMaps!
wm1.get(o2) ; // "azerty"
wm2.get(o2) ; // undefined, because there is no key for o2 on wm2
wm2.get(o3) ; // undefined, because that is the set value
wm1.has(o2) ; // true
wm2.has(o2) ; // false
wm2.has(o3) ; // true (even if the value itself is 'undefined')
wm3.set(o1, 37) ; // 37
wm3.get(o1) ;
wm1.has(o1) ; // true
wm1.delete(o1) ; // false
wm1.has(o1) ;
8.5. วัลตถถุ Symbol
Symbol
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol
Primitive
https://developer.mozilla.org/en-US/docs/Glossary/Primitive
วตลั ถถชนดิพ Symbol เปน็ป ชนิพดข้อค มลย แบบ Primitive ซงึ่ืงถ Primitive มคี 6 ตวลั ก็คก งอ
string, number, bigint, boolean, undefined และ Symbol
ฟังฝ กชล งัน่ลื Symbol() คงนคส่ยู ำกลบลั มสำเป็ปนค่ยูสำทมคืงี่ ชคี นดิพ เปน็ป Symbol()
บทท่ขิีร 8 : วัตล ถนุค ค่าสนใจ 105
คสู่ย ำทงืค่คี นง กลบลั จสำก ฟงัฝ กชล ่ลงนัื Symbol() ยนย คีคเสมอ(ไมเูย่ หมอง นกันล ) คยูส่ ำของ Symbol อสำจถยกใชคเ้ ป็นป ตวัล บยงู่ ชีซค
สสสำหรลบั คณถ สมบัตล ขพิ องวตัล ถถ นค่เีงื ป็ปนวตัล ถถประสงคหล ลกัล ของขอ้ค มลย ชนพิดนีซค แมว้ค ู่สย ำมลนั จะมีคหลสำกหลสำยวธิพ คที ่ีคงจื ะสร้คสำงตวลั ทคี่ยงื ย
นคีค ขนึซถ มสำ
ตวลั อยสูย่ ำง
let sym1 = Symbol() ;
let sym2 = Symbol('foo') ;
let sym3 = Symbol('foo') ;
Symbol('foo') === Symbol('foo') // false ***
// ไมคร่ องรบัล การประกาศปบบน้ีขน // TypeError
let sym = new Symbol() // "symbol"
// "object"
let sym = Symbol('foo')
typeof sym
let symObj = Object(sym)
typeof symObj
106 หลกลั การเขขยี นโปรแกรม Google Apps Script โดย วสลันต์ต คณุค ดลร กเศวต ([email protected])
บททที่ข 9
เทคนนคิ ตลวั แปรวัตล ถถ
9.1. จับล Key จสำก Value แบบทคีท่ 1
How to get a key in a JavaScript object by its value?
https://stackoverflow.com/questions/9907419/how-to-get-a-key-in-a-javascript-object-by-its-value
โคด้ค
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]
108 หลักล การเขยีข นโปรแกรม Google Apps Script โดย วสนัล ต์ต คณคุ ดรลกเศวต ([email protected])
9.2. จบัล Key จสำก Value แบบทคท่ี 2 สรสค้ ำงเป็ปนเมถอด
How to get a key in a JavaScript object by its value?
https://stackoverflow.com/questions/9907419/how-to-get-a-key-in-a-javascript-object-by-its-value
โคดค้
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'
};
var key = languageCodes.getKey('Greek');
console.log(key) ; // EL
บทท่ีิรข 9 : เทคนคร ตลัวแปรวลตั ถุค 109
9.3. กรองตวัล แปรวัตล ถุทถ ี่ทซค สสซ ำ
“remove duplicate objects from array javascript” Code Answer
https://www.codegrepper.com/code-examples/javascript/remove+duplicate+objects+from+array+javascript
โคดค้
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' }
]
จรพิงแคู่ยเพีคยงสัลซนๆแคยู่นคีซก็กใช้คไดค้แลค้ว ก็กคงอ เป็ปนกสำรสร้คสำงอสำเรยลใหมยู่ จสำกกค้อนอะไรกก็รตสำมแตู่ย จสำกนซลัน new
Set จะกลองตวลั ซสซสำในอสำเรยลออก โค้คดก้คอนหน้คสำใช้ค JSON.stringify และ JSON.parse เพ่งือแปลงกลลับไปมสำระ
หว่สูย ำง JSON กบัล Javascript object เพืง่อปป้องกนัล Error
const data = Array.from(new Set(objsInArr))
110 หลกลั การเขีขยนโปรแกรม Google Apps Script โดย วสลันตต์ คณคุ ดลร กเศวต ([email protected])
9.4. กรองตวลั แปรวลัตถทถุ ซีท่ค ซสสำ โดยใชค้ 1 คยีค ย์
โคคด้
function callFunction(){
var arrayWithDuplicates = [
{ "type":"LICENSE", "licenseNum": "12345", state:"NV" } ,
{ "type":"LICENSE", "licenseNum": "A7846", state:"CA" } ,
{ "type":"LICENSE", "licenseNum": "12345", state:"OR" } ,
{ "type":"LICENSE", "licenseNum": "10849", state:"CA" } ,
{ "type":"LICENSE", "licenseNum": "B7037", state:"WA" } ,
{ "type":"LICENSE", "licenseNum": "12345", state:"NM" }
];
var uniqueArray = removeDuplicates(arrayWithDuplicates, "licenseNum") ;
Logger.log("uniqueArray is: " + JSON.stringify(uniqueArray)) ;
}
function removeDuplicates(originalArray, prop) {
var lookupObject = {} ;
for(var i in originalArray) {
lookupObject[originalArray[i][prop]] = originalArray[i] ;
}
var newArray = [] ;
for(i in lookupObject) {
newArray.push(lookupObject[i]) ;
}
return newArray ;
}
ผล
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 : เทคนคร ตัวล แปรวตัล ถุค 111
9.5. กรองตัวล แปรวตัล ถทุถ คซีท่ ซสส ำ โดยใชค้ 1 คยคี ์ย - Map
โคด้ค
function callFunction(){
let person = [ { name : "john" } ,
{ name : "jane" } ,
{ name : "imelda" } ,
{ name : "john" } ] ;
Logger.log(removeDuplicates(person, item => item.name)) ;
// ผล : [{name=john}, {name=jane}, {name=imelda}]
}
function removeDuplicates(data, key) {
return [ ...new Map(data.map(item => [key(item), item])).values() ]
}
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 ;
}
112 หลกลั การเขีขยนโปรแกรม Google Apps Script โดย วสันล ต์ต คณคุ ดลร กเศวต ([email protected])
บทที่ขท 10
เงี่งอท นไขและลูปล
10.1. if – else if - else
JavaScript if else and else if
https://www.w3schools.com/js/js_if_else.asp
if, else if, else ใช้สค รส้ค ำงทสำงเลงอกในกสำรทสสำโคค้ดตสำมเงอง่ื นไข เชยู่น ถสค้ ำค่สูย ำเปนป็ + ทสส ำโคค้ดในบลก็อคนีคซ แตยูถ่ ้สค ำ
เปป็น – ทสสำอกคี บลกอ็ คหน่ถึืงง เปป็นต้นค
10.1.ก.) รปย แบบของ if
if (condition) { // condition เปน็ป บูบลลนขี คมืนค่คา true/false
// โค้ชด – ทกาโคด้ช ในบลอ็ก คนนี้ข หากเงอิืม่ร นไขเปนป็ true ;
}
ตวร อยม่สำง
function myFunction() {
var num = 51 ;
if(num > 50) { // ถช้ามากกวา่ค 50
Logger.log("คะแนนของคุณจ ครอ " + num + " : ผายู่ น") ; // ทาก บรรทลัดนี้นข
} // End if
}
10.1.ข.) รปย แบบของ if – else
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
}
114 หลลักการเขีขยนโปรแกรม Google Apps Script โดย วสันล ตต์ คณุค ดรลกเศวต ([email protected])
10.1.ค.) รปย แบบของ if – else if - else
if (condition1) {
// โคด้ค หากเงอรี่ท นไข condition1 เปปน็ true ;
} else if (condition2) {
// โคด้ค หากเงอ่ีรท นไข condition1 เป็นป false แตู่ย condition2 เป็ปน true ;
} else {
// โคดค้ หากเงอทร่ี นไข condition1 เปป็น false แตู่ย condition2 เปป็น false ;
}
ตวร อยส่ม ำง - else if ใชซค้ ้อค นกลนั ไดห้ค ลสำยตวัล
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 รันล โคดช้ ทบริข่ี ลก็อคน้ขีน
}
บททีขิ่ร 10 : เงมืร่อิ นไขและลูบป 115
ตวร อย่สม ำง
function swtichTest() { break ;
break ;
var myVar ; break ;
switch (2) {
case 0 : myVar= "ศยนยล" ;
case 1 : myVar= "หนงท่ีน " ;
case 2 : myVar= "สอง" ;
default : myVar= "ไมู่รย ้คย" ;
}
Logger.log(myVar) ;
}
ตวร อยมส่ ำง
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) {
// โคดช้
}
Statement 1 : ทสสำครซงลั เดคียว กยอู่ นเขสค้ ำไปทสสำโคดค้ ในบลก็อค for
Statement 2 : เงื่งอนไขทืค่จีง ะเขค้สำไปทสส ำโคด้ค ในบลอก็ ค for – ถสค้ ำยงัล จรพิงทสสำตอ่ยู ไปเรืง่อยๆ
Statement 3 : ทสสำหลัลงจสำกโค้คดในบล็อก ค for ทสสำแลวค้ จะมสำทสส ำ statement3 ตอยู่ แล้ควไปตรวจสอบ
เง่ืงอนไขใน statment2 วสู่ย ำยัลงจริงพ อยหูย่ รงอไมยู่
116 หลลักการเขียข นโปรแกรม Google Apps Script โดย วสนลั ต์ต คณุค ดลร กเศวต ([email protected])
ตรวอยส่ม ำงทีท่ 1
ทสสำโคดค้ ครงซัล แรก กคก็ อง i = 0, ครลงัซ ทคงีื่ 2 i = 1 , ครัซงล ทค่ืีง 3 i = 2 และเมงือ่ i = 3 อยยูน่ อกเงือง่ นไขใน
statement2 จถงึ ออกจสำกลยป for ไปโดยไมทูย่ สสำโคดค้ เม่งือ i = 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
}
หมสำยเหตุถ 1 : เครอ่ืง งหมสำย += กคก็ งอ เอสำข้คอควสำมดสค้ ำนขวสำมสำใสูใย่ นตวัล แปร Text ดส้ค ำนซส้ค ำย ลยป for จะ
ทสสำใหข้ค อค้ ควสำมสะสมกลนั ไปเร่งอื ยๆ
หมสำยเหตถุ 2 : i++ ก็คก อง i=i+1 เปป็นกสำรเพิม่ืงพ ค่สูย ำให้ค i ทีคละ 1
วธพิ ีคกสำรใชคล้ ยป for พลิกพ แพลงไดมค้ สำก เชูยน่ ใสยู่หลสำยคสส ำสงง่ืัล ลงใน statement เดีคยว หรงอ เวน้ค บสำง statement
กก็ได้ค เปป็นตนค้
ตรวอยส่ม ำงทที่ 2
statement1 มีคกสำรกสส ำหนดค่สยู ำของตวัล แปรหลสำยตลวั ขลซันดว้ค ย " , " (คอมมา่ค ) สลังเกตวถ สยู่ ำจบ statement1 ดว้ค ย
เคร่งอื งหมสำย " ; " (เซมคร อลอ่ค น)
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 : เงม่ือริ นไขและลบูป 117
ตวร อยมส่ ำงท่ีท 3
ไมร่ยู ะบถ statement 1 และ 3 แตู่ใย ช้วค ธิพ คกี สส ำหนดไว้คนอก for หรอง โคดค้ ดส้ค ำนใน for
function forLoop() {
var cars = ["BMW" , "Volvo" , "Saab" , "Ford" ] ;
var i = 0 , text = "" ;
var len = cars.length ;
for ( ; i < len ; ) {
text += cars[i] + "<br>" ;
i++ ;
} // 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
}
118 หลกลั การเขีขยนโปรแกรม Google Apps Script โดย วสลันตต์ คณุค ดรลกเศวต ([email protected])
ตรวอยส่ม ำงทที่ 2
เอสำตวลั อยย่สู ำงทืค่งี 1 มสำปรัลบแก้ค อธิบพ สำยให้คกระจยสู่ ำงยงพ่ิืงขนึซถ วยูส่ ำ x คงอคสู่ย ำอะไร - x กคก็ อง key ทคีงื่ถยกสู่ยงเข้คสำไป
function forIn_2() {
var oPerson = {
fname : "John" ,
lname : "Doe" ,
age : 25
};
var tText = "" ;
var x ;
for (x in oPerson) { // x คมอื Key ของ Object
tText += oPerson[x]+" "; // tText เกบก็ Value ของ Key
Logger.log(x) ;
Logger.log(tText) ;
} // 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
}
บททีขิร่ 10 : เงรอมืิ่ นไขและลบูป 119
10.5. for of
JavaScript for/of Statement - https://www.w3schools.com/jsref/jsref_forof.asp
ใชวค้ นลปย เขค้สำไปในคสูย่ ำของวัลตถถ ทคสีืง่ สำมสำรถวนลยปเขค้สำไปไดค้ ไมวู่ย ส่ยู ำจะเปป็นอสำเรยล ขค้อควสำม หรอง อ๊อก บเจ็กก ตล
เป็นป ต้นค
รปย แบบกสำรใชคง้ สำน
for (variable of iterable) {
// code
}
ตวร อย่สม ำงทีท่ 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
120 หลลกั การเขยีข นโปรแกรม Google Apps Script โดย วสนลั ตต์ คณคุ ดรลกเศวต ([email protected])
10.6. while
JavaScript While Loop
https://www.w3schools.com/js/js_loop_while.asp
while เปป็นคสสำสงัืง่ล ลปย เชยูน่ เดีคยวกลบั for โดยจะทสสำโคด้ค ท่ีคงือยยู่ใน while ไปเร่องื ยๆ ตรสำบทเคีงื่ งงื่อนไขของ while
เปนป็ จริพง รปย แบบกสำรใชคง้ สำนดงลั ตอยู่ ไปนซีค
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)
บททขีริ่ 10 : เงิือ่รม นไขและลบูป 121
ตวร อยสม่ ำง
function DoWhile_1() {
var text = "" ;
var i = 11 ;
do {
text += "The number is " + i + ". " ;
i-- ;
} while(i >= 0) ;
Logger.log(text) ;
}
ผล
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.
10.8. try catch throw finally
10.8.ก.) try และ catch
JavaScript Errors - Throw and Try to Catch
https://www.w3schools.com/js/js_errors.asp
try ใชท้ค ดสอบโค้คดขณะประมวลผล
catch ใชคจ้ ดัล กสำรกัลบ Error กรณบคี ลอ็ก ค try เกดพิ Error
try {
// Block of code to try
}
catch(err) {
// Block of code to handle errors
}
ตวร อยม่สำง
function myFunction() {
adddlert("Welcome guest!") ; // ไมคม่ ีฟข งัฟ กช์ต น่ลิรั ชืมริอ่ adddlert
// เกรด Error ระบบไมไ่ค ปตอค่
}
122 หลักล การเขขยี นโปรแกรม Google Apps Script โดย วสลนั ตต์ คณุค ดลร กเศวต ([email protected])
แก้คเปปน็ แบบนคีซ เพื่งอปอ้ป งกันล กสำรเกพดิ Error แลคว้ โปรแกรมคคส้ ำง
function myFunction() {
try {
adddlert("Welcome guest!") ;
}
catch(err) { // Error ถกูบ สคง่ มาใหช้ catch
Logger.log(err.toString()) ; // จลับ Error มา Logs ดบู
// ---> ออกจาก Catch แลชว้ ทาก โคดช้ ตอค่ ไป
}
Logger.log('Keep going') ; // ทาก ตค่อ ****
}
ผล
Logs
[ ] ReferenceError: "adddlert" is not defined. (ไมมค่ ขฟี ัฟงก์ตชนิั่รล adddlert )
[ ] Keep going
10.8.ข.) throw
throw ใชใ้ค นบล็อก ค try (ทคีงื่องื่นก็กใชไ้ค ดค้) ใช้สค รสค้ ำง Error เอง และขค้สำงเปป็น Error ออกมสำ เหมสำะมสำกกบัล
กสำรนสส ำไปทสส ำ Validation
// รัลบค่าค x 5-10 เทา่ค นนลี้นั ถช้าใสเค่ ปน็ป อยาค่ งอรมนิ่ื จะ catch error ออกมา
function myFunction() {
var x = 'dddd' ;
try { // ถาช้ x เปน็ป คคา่ วา่ค ง
if(x == "") throw "empty" ; // ถช้า x ไมค่ใชคต่ ลวั เลข
if(isNaN(x)) throw "not a number" ;
x = Number(x) ; // แปลง x เปนป็ ตลัวเลข
if(x < 5) throw "too low" ; // ถช้า x นอ้ช ยกวคา่ 5
if(x > 10) throw "too high" ; // ถา้ช x มากกวาค่ 10
}
catch(err) { // Input is not a number
Logger.log("Input is " + err) ;
}
}
ผล
Logs
[ ] Input is not a number
บททีิรข่ 10 : เงมืริ่อนไขและลปูบ 123
10.8.ค.) finally
finally ใชทค้ สสำโคดค้ ตู่ยอจสำก try และ catch
// รัลบคาค่ x 5-10 เทคา่ นน้ันีล ถาช้ ใสคเ่ ปน็ป อย่คางอรืินม่ จะ catch error ออกมา
function myFunction() {
var x = 'dddd' ;
try {
if( x == "") throw "empty" ;
if( isNaN(x) ) throw "not a number" ;
x = Number(x) ;
if( x < 5) throw "too low" ;
if( x > 10) throw "too high" ;
}
catch(err) {
Logger.log("Input is " + err) ; // Input is not a number
}
finally {
x=5;
Logger.log(x) ;
}
}
ผล
Logs
[ ] Input is not a number
[ ] 5.0
124 หลกัล การเขียข นโปรแกรม Google Apps Script โดย วสนัล ต์ต คณคุ ดลร กเศวต ([email protected])
บทที่ขท 11
อาเรย์ร
11.1. อสำเรยย์ครืออะไร
อาเรยล(Array) เปน็ป ขคอ้ มลย แบบกอ้ค น มีสค มสำชิพกในก้อค นขคอ้ มยลไดห้ค ลสำยตวัล เกก็บขอค้ มยลแบบมมีค พิติพ เปป็น
เสค้น(1 มพิต)ิพ เปป็นตสำรสำง(2 มตพิ )พิ เปน็ป ต้คน
อสำเรยพ์ใชบค้ มอ่ ยมสำกในกสำรเขทยนโคด้ค โดยเฉพสำะกสำรทสส ำงสำนกบร Google Sheets ผค้มเู ขยท นจนงแยกออกมสำ
เป็นป บทใหญ่ม
11.2. พรืซนฐสำนข้คอมลมู ชนพดอสำเรย์ย
สมสำชกิพ ในอสำเรยเล กก็บไว้คในวงเลก็บ [ ] เชยนู่
var fruit = [ 'Apple' , 'Banana' , 'Pear' , 'Strawberry' ] ;
ขคส้ ำงตคน้ เปน็ป อสำเรยพ์ 1 มติพ ิพ หรงอ อสำเรยแ์พ บบเสค้น 1 แถว
เรสำสสำมสำรถอ้สค ำงอิงพ ตสส ำแหนู่ยงกสำรเกก็บขอค้ มลย โดยระบถตัวล เลขลงไปใน [ ] หรงอ เรทยกว่มสำดรรชนทตสส ำแหนง่ม เพง่ือ
ดงึถ สมสำชกิพ ในอสำเรยลออกมสำใชค้ เช่ยูน fruitsArray[0] ก็กคอง Apple
ตวร อยม่สำง
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. อสำเรยย์ 2 มพตพ
อสำเรยพ์ 2 มติพ พิ ในระบบของ Google Apps Script เรสำจะเขยีค นในลัลกษณะ อสำเรยแพ์ บบเส้คนในอสำเรยพ์แบบ
เสนค้ ซึงงถื่ สสำมสำรถเขีคยนไดดค้ ลงั นซีค [ [ , ] , [ , ] , [ , ] ]
126 หลัลกการเขยีข นโปรแกรม Google Apps Script โดย วสัลนตต์ คณุค ดลร กเศวต ([email protected])
11.3.ก.) การเขยท นอาเรยล 2 มติพ พิ
ยกตวลั อยสยู่ ำง
var Arr2dim = [ ["Linda",27] , ["Lisa",35] , ["John",42] ] ;
หรอง เขีคยนแบบนีคซ เพอ่งื ใหค้เขค้สำใจวูสย่ ำมกคี ีง่แคื ถว กีงคค่ื อลมัล นล
var Arr2dim = [ // คอลมัล นต์ทิขร่ี 1 // คอลมัล นต์ทิร่ขี 2
[ "Linda" , 27 ] , // แถวทขริ่ี 1
[ "Lisa" , 35 ] , // แถวทข่ิรี 2
[ "John" , 42 ] // แถวทีริ่ข 3
];
อสำเรยลขส้ค ำงตค้นมคี 3 แถว 2 คอลลมั นล
11.3.ข.) การเขค้าถนงสมาชพิกในอาเรยล 2 มิตพ ิพ
Arr2dim[0] = อสำเรยเล สนค้ แรก กค็ซ ือร ["Linda",27]
Arr2dim[0][0] = อสำเรยเล สค้นแรก สมสำชกิพ ตวลั แรก กคซ็ ือร Linda
function arrayFunction() {
var Arr2dim = [
["Linda", 27] , // Arr2dim[0] กคก็ อมื อาเรยต์เส้ชนนีนข้
["Lisa", 35] , // Arr2dim[1] กค็ก อมื อาเรยเต์ ส้นช น้ีนข
["John", 42] // Arr2dim[2] กคก็ ือม อาเรยต์เสน้ช นีน้ข
];
Logger.log(Arr2dim); // พมร พต์ : [ ["Linda",27] , ["Lisa",35] , ["John",42] ]
Logger.log(Arr2dim[0]); // พมร พ์ต : ["Linda",27]
Logger.log(Arr2dim[0][0]); // พมร พ์ต : Linda
}
11.3.ค.) การนับต จาส นวนสมาชิพกในอาเรยล
กสำรนบลั จสสำนวนสมสำชพกิ ในอสำเรยลใชค้ ทสสำไดค้โดยใชคค้ ณถ สมบัลตพิ length ของอสำเรยล
ตรวอยส่ม ำง - กรณคี 1 มตพิ พิ
var fruitsArray = [ 'Apple' , 'Banana' , 'Pear' , 'Strawberry' ] ;
Logger.log(fruitsArray.length) ; // พมร พ์ต : 4
ตรวอยสม่ ำง - กรณีค 2 มติพ พิ
function arrayFunction() {
var Arr2dim = [ ["Linda", 27] ,
["Lisa", 35] ,
["John", 42] ] ;
Logger.log(Arr2dim.length) ; // พมร พ์ต : 3 – เส้นช นอกมขสี มาชกร 3
Logger.log(Arr2dim[0].length) ; // พมร พต์ : 2 – เสนช้ ใน(ตัลวแรก - 0) มสขี มาชกร 2 ตัลว
Logger.log(Arr2dim.length * Arr2dim[0].length) ; // พมร พ์ต : 6 – สมาชกร ที้งลัน หมด
}
บททริ่ีข 11 : อาเรยต์ 127
11.4. Spread operator (3 จถุด) - Chrome V8
JavaScript | Spread Operator
https://www.geeksforgeeks.org/javascript-spread-operator/
Spread operator ใชว้ค นลยป ณ ทเค่ีงื รยคี กใชค้ เพงอ่ื ดงึถ เฉพสำะสมสำชิกพ ในอสำเรยล(หรอง ออ๊ก บเจ็กกต)ล มสำประมวลผล
รปย แบบกสำรใชงค้ สำน
var variablename1 = [...array] ;
ตวร อยส่ม ำงท่ที 1 – ใชค้รวมอสำเรยล
// ใช้ช concat()
let arr = [ 1 ,2 ,3 ] ;
let arr2 = [ 4 ,5 ] ;
arr = arr.concat(arr2) ; // [ 1 , 2 , 3 , 4 , 5 ]
Logger.log(arr) ;
// ใช้ช … เอาเฉพาะสมาชรกของอาเรยมต์ า
let arr3 = [ 6 ,7 ,8 ] ;
let arr4 = [ 9 ,10 ] ;
arr3 = [...arr3 , ...arr4] ;
Logger.log(arr3) ; // [ 6 , 7 , 8 , 9 , 10 ]
ตวร อยสม่ ำงที่ท 2 – ใชก้ค อก๊ ปปปี้ หรอง ถ่สยู ำยโอนคสู่ย ำของอสำเรยล
// ใชช้ =
let arr = [ 'a' , 'b' , 'c' ] ;
let arr2 = arr ;
arr2.push('d') ; // เพิร่มสมาชรกลงในอาเรย์ต arr2
Logger.log(arr2) ; // [a,b,c,d]
Logger.log(arr) ; // [a,b,c,d] - มผขี ลกลบั อาเรยตต์ ัี้งลน ตนช้ ดว้ช ย (arr)
// ใชช้ ...
let arr3 = [ 'a' , 'b' , 'c' ] ;
let arr4 = [...arr3] ;
arr4.push('d') ; // เพม่ิร สมาชกร ลงในอาเรยต์ arr2
Logger.log(arr4) ; // [a,b,c,d]
Logger.log(arr3) ; // [a,b,c] - ไมมค่ ผีข ลกับล อาเรยต์ต นงัลี้ ตนช้ ดช้วย (arr3)
128 หลัลกการเขขียนโปรแกรม Google Apps Script โดย วสัลนต์ต คณุค ดลร กเศวต ([email protected])
ตรวอยม่สำงทท่ี 3 – ใช้คขยสำยสมสำชิพก อสำรเยลปกตพิสสำมสำรถใช้ค push, splice หรงอ unshift ไดค้อยู่ยแล้คว แต่ยูหสำกใชค้
Spread operators จะมีปค ระเดก็นเรอง่ื งมิพตขพิ องอสำเรยล ทนงืคี่ ่สูย ำสนใจ
// ใชกช้ ารปปอ้ นสมาชรกเปปฯ็ อาเรย์ตลงไปตรง
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' ]
ตวร อยส่ม ำงทท่ี 4 – ใชถค้ ู่ยสำยโอนสมสำชกิพ ในอสำเรยล แบบสมสำชกพิ ตลวั สดถ ทค้สำย เก็บก สมสำชกิพ ทืเ่คีง หลงอทังซล หมด
let arr = [ "A" , "B" , "C" , "D" , 25 ]
let [ x , y , ...z ] = arr // รบปู แบบการใช้ช Array deconstructing
Logger.log(x) // [ 'A' ]
Logger.log(y) // [ 'B' ]
Logger.log(z) // [ 'C', 'D', 25 ]
ตวร อยส่ม ำงทที่ 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
11.5. Rest parameter – Chrome V8
JavaScript | Rest parameter
https://www.geeksforgeeks.org/javascript-rest-operator/?ref=lbp
Rest parameter เป็ปนวิพธทีค สำงออกสสสำหรบลั กสำรสยงู่ พสำรสำมเพิ ตอรลไปประมวลผลในฟฝังกลชืลั่นง อนญถ สำตใหค้เรสำไมยู่
ตอ้ค งกสส ำหนดจสส ำนวนของพสำรสำมเิพ ตอรล เรสำสสำมสำรถสู่ยงจสสำนวนพสำรมเิพ ตอรกล คีงื่ตวัล ไปประมวลผลกกไ็ ดค้
รยปแบบกสำรใชงค้ สำน
//... is the rest parameter
function functionname[...parameters]{
// statement ;
}
บททริขี่ 11 : อาเรย์ต 129
ตวร อยม่สำงท่ีท 1
// ไม่ไค ดใช้ ชช้ Rest parameter
function fun(a, b){
return a + b ;
}
Logger.log(fun(1, 2)) ; // 3
Logger.log(fun(1, 2, 3, 4, 5)) ; // 3 – สงค่ พารามรเตอรไต์ ป 5 แตใ่ค ชแช้ คค่ 2 ตัวล
// ใช้ช …
function fun2(...input){ // คลช้ายกบัล สค่งพารามเร ตอร์เต ปนป็ กช้อนอาเรยต์ แลว้ช ใชชล้ ปูบ วนเข้าช ไป
let sum = 0 ; // เพยขี งแต่คไม่ตค อช้ งกกาหนดมรตขร องอาเรย์ต
for(let i of input){
sum += i ;
}
return sum ;
}
Logger.log(fun2(1, 2)) ; // 3
Logger.log(fun2(1, 2, 3)) ; // 6
Logger.log(fun2(1 ,2, 3, 4, 5)) ; // 15
ตวร อยม่สำงที่ท 2
function fun(a,b,...c){ // Mukul Latiyan
Logger.log(`${a} ${b}`) ; // [ 'Lionel', 'Messi', 'Barcelona' ]
Logger.log(c) ; // Lionel
Logger.log(c[0]) ; // 3
Logger.log(c.length) ; // 0
Logger.log(c.indexOf('Lionel')) ;
}
// a b c d e
fun('Mukul','Latiyan','Lionel','Messi','Barcelona') ;
11.6. Array destructuring – Chrome V8
Array destructuring
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
Array destructuring กค็ก อง กสำรดถึงสมสำชิกพ ของอสำเรยไล ปใชค้
ตวร อยส่ม ำงที่ท 1 - พซงนฐสำน
const foo = ['one', 'two', 'three'] ;
const [red, yellow, green] = foo ;
Logger.log(red) ; // "one"
Logger.log(yellow) ; // "two"
Logger.log(green) ; // "three"
130 หลกัล การเขขยี นโปรแกรม Google Apps Script โดย วสนัล ต์ต คณุค ดลร กเศวต ([email protected])
ตรวอยสม่ ำงทที่ 2 – มกีค สำรกสสำหนดค่สูย ำ Default ไวค้ จสำกนัลนซ กสส ำหนดคยู่สำใหมยู่เปป็นบสำงตลัว
let a, b ;
// Default ของ a กค็ก อมื 5 จากน้นีนลั กาก หนดค่าค ใหมค่ก็กคอมื 1
[a=5, b=7] = [1] ;
Logger.log(a) ; // 1
Logger.log(b) ; // 7
บททขีริ่ 11 : อาเรย์ต 131
132 หลลักการเขขียนโปรแกรม Google Apps Script โดย วสันล ต์ต คณุค ดลร กเศวต ([email protected])
บททขที่ 12
อาเรยเ์ร มถอด
12.1. push()
JavaScript Array push() Method
https://www.w3schools.com/jsref/jsref_push.asp
push() ใชใ้ค สูขย่ คอ้ มลย ลงในอสำเรยล ณ จถดสดถ ท้คสำย โดยเขส้ค ำไปเปลคีง่ยื นแปลงอสำเรยตล ซัลงตคน้ และคนง คสู่ย ำกลลับมสำเปน็ป
จสส ำนวนสมสำชกิพ ของอสำเรยล
รปย แบบกสำรใช้คงสำน
array.push(item1, item2, ..., itemX)
พสำรสำมเพิ ตอรล
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]
var fruits2 = [ "Banana" , "Orange" , "Apple" , "Mango"] ;
// push สมาชกร เชช้าไป - แตฝค่ ากไว้ใช นตลวั แปรใหมด่ค ้ชวย
var newfruits2 = fruits2.push("Kiwi" , "Lemon" , "Pineapple") ;
// ตลวั แปรใหมเค่ กบก็ จาก นวนสมาชรก ไมค่ใชอ้ช าเรย์ตทิรข่ีเปลยขีริ่ นไป ****
Logger.log(newfruits2) ; // 7.0
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 (จาก เปป็น) สมาชกร ใหมทค่ ขจี่ิร ะเพม่ริ ลงในอาเรย์ต
134 หลลกั การเขีขยนโปรแกรม Google Apps Script โดย วสนัล ต์ต คณุค ดลร กเศวต ([email protected])
ตวร อยส่ม ำง
var fruits = [ "Banana" , "Orange" , "Apple" , "Mango" ] ;
fruits.unshift("Lemon" , "Pineapple") ;
Logger.log(fruits) ; // [ Lemon, Pineapple, Banana, Orange, Apple, Mango ]
var fruits2 = [ "Banana" , "Orange" , "Apple" , "Mango" ] ;
var newfruits2 = fruits2.unshift("Lemon" , "Pineapple") ;
Logger.log(newfruits2) ; // 6.0
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 ]
var fruits2 = [ "Banana" , "Orange" , "Apple" , "Mango" ] ;
var newfruits2 = fruits2.pop() ;
Logger.log(newfruits2) ; // Mango
12.4. shift()
JavaScript Array shift() Method
https://www.w3schools.com/jsref/jsref_shift.asp
shift() ใชค้ลบข้คอมลย ในอสำเรยล ตวลั แรก และคงนคูยส่ ำกลัลบมสำเปน็ป ขคอ้ มยลตวลั ทีืถ่งค กย ลบออก
รยปแบบกสำรใชง้ค สำน
array.shift()
บททร่ิีข 12 : อาเรย์ตเมถอด 135
ตวลั อยสยู่ ำง
var fruits1 = [ "Banana" , "Orange" , "Apple" , "Mango" ] ;
fruits1.shift() ; // เขช้าไปเปล่ริยีข นแปลงอาเรย์ตต ง้ัีลน ตช้นด้ชวย
Logger.log(fruits1) ; // [ Orange, Apple, Mango ]
var fruits2 = [ "Banana" , "Orange" , "Apple" , "Mango" ] ;
var newfruits2 = fruits2.shift() ;
Logger.log(fruits) ; // Banana
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 ใชชเ้ ลขลบ เพอ่ิืรม ระบตคุ าก แหนง่ค จากทา้ช ย
(ไมค่บลงั คบลั ) จกานวนสมาชกร ทีจขริ่ ะลบออก (0 = ไมล่ค บ)
howmany (ไมค่บังล คบัล ) สมาชกร ใหม่คทร่ิขจี ะเพร่ิมลงในอาเรย์ต (ไม่รค ะบคุ = ไมคเ่ พมริ่ )
item1, ..., itemX
ตวร อยส่ม ำงที่ท 1 – หสำกไมยรู่ ะบถ item จะเปนป็ กสำรลบออก ตสำมตสสำแหนยงู่ และจสส ำนวนทรงีค่ื ะบถ
// ลบ ลบ
var fruits1 = [ "Banana" , "Orange" , "Apple" , "Mango" , "Kiwi" ] ;
fruits1.splice(2, 2) ; // เข้าช ไปเปลยริ่ขี นแปลงอาเรยตต์ ังีล้น ต้ชนด้วช ย
Logger.log(fruits1) ; // [ Banana, Orange, Kiwi ]
var fruits2 = [ "Banana" , "Orange" , "Apple" , "Mango" , "Kiwi" ] ;
var newfruits2 = fruits2.splice(2, 2) ;
Logger.log(newfruits2) ; // ["Apple" , "Mango" ]
136 หลลักการเขยีข นโปรแกรม Google Apps Script โดย วสัลนต์ต คณุค ดลร กเศวต ([email protected])
ตวร อยสม่ ำงทที่ 2 – ระบพถ สำรสำมเิพ ตอรล item ดว้ค ย กกค็ อง สมสำชกิพ ทีง่คจื ะเพงม่ืพิ ลงไป
// 0 1 2 3
var fruits1 = [ "Banana" , "Orange" , "Apple" , "Mango" ] ;
// เรมริ่ ดรรนตขี าก แหนค่งทีขิ่ร 2 ลบออก 1 ตัลว >> เพม่ิร ลงไป 2 ตวัล ก็กคืมอ "Lemon", "Kiwi"
fruits1.splice(2, 1, "Lemon", "Kiwi") ;
Logger.log(fruits1) ; // [ Banana, Orange, Lemon, Kiwi, Mango ]
var fruits2 = [ "Banana" , "Orange" , "Apple" , "Mango" ] ;
// คมนื คาค่ เป็นป แล้ชวจบลั ใส่คตวัล แปรตวัล ใหม่ค
var newfruits2 = fruits2.splice(2, 1, "Lemon", "Kiwi") ;
Logger.log(newfruits2) ; // [Apple] – ตลัวทข่ิถีร กบู ลบ
12.6. slice()
JavaScript Array Methods - Slicing an Array
https://www.w3schools.com/js/js_array_methods.asp
slice() ใช้คตัลดสมสำชพิกบสำงสูย่วนของอสำเรยล ไปสรค้สำงอสำเรยลใหมยู่ slice() ไมู่ยเข้คสำไปเปลค่ืงียนแปลงอสำเรยลตซัลงตค้น
ฉะนันลซ ใหคส้ รคส้ ำงตลัวแปรมสำรบัล ผลลพัล ธดล ้วค ย
รปย แบบกสำรใช้คงสำน
array.slice(start, end)
พสำรสำมิเพ ตอรล
Parameter Description
start
(ไมบค่ ลังคบลั ) เลข integer ทขีริ่ใช้ชระบตุค าก แหนง่ค เริม่ร การเลือม ก
end - ตาก แหนคง่ แรก เรร่มิ จาก 0
- ใชชเ้ ลขลบ เพิรืม่อเลอืม กจากดช้านหลงลั
- หากปล่คอยว่คางจะหมายถงึจ 0
(ไมบ่ค งลั คบัล ) เลข integer ทีขรใ่ิ ชร้ช ะบุตค กาแหนงค่ จบการเลมือก แตไ่ค มค่รวมตวัล นีข้น
- หากปลอค่ ยวาค่ งไว้ช จะเร่มิร จาก start ไปจนถึจงตลัวสดุค ท้ชาย
- ใชช้เลขลบ เพิือ่มร เลอืม กจากดช้านหลงัล
ตรวอยสม่ ำง
// 01 2 34
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"] ;
fruits.slice(3) // ไมเ่ค ข้าช ไปเปลยขิ่ีร นแปลงอาเรยต์ต งีลนั้ ต้นช
// เริม่ร จากดรรชนีขตาก แหนง่ค ท่ีขิร 3 ไปจนจบ // [ Apple, Mango ]
var citrus = fruits.slice(3) ;
บททิีร่ข 12 : อาเรยต์เมถอด 137
ตวร อย่สม ำงทที่ 2
// 01 2 34
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"] ;
// เรริ่มจากดรรชนขตี กาแหน่งค ทิข่ีร 1 ไปจนถจึงก่อค นตวัล ทิข่รี 3 // ["Orange", "Lemon"]
var citrus = fruits.slice(1, 3) ;
12.7. ตัลวอยส่ม ำงกสำรใชค้งสำนอสำเรย์เย มถอดกบัล อสำเรย์ย 2 มตพ พ
อสำเรยล 2 มตพิ ิยพ ัลงใชค้ push, shift ไดตค้ สำมปกตพิ
ตวัล อยสู่ย ำง
var Arr2dim = [ ["Linda", 27] ,
["Lisa", 35] ,
["John", 42] ] ;
Arr2dim.push(["Wasan",42]) ;
Logger.log(Arr2dim) ; // พมร พต์ : [ [Linda,27.0], [Lisa,35.0], [John,42.0], [Wasan, 42.0] ]
Arr2dim.pop() ; // พมร พต์ : [ [Linda,27.0], [Lisa,35.0], [John,42.0] ]
Logger.log(Arr2dim) ;
Arr2dim[0].push("179") ;
Logger.log(Arr2dim) ; // พมร พต์ : [ [Linda, 27.0, 179], [Lisa, 35.0], [John, 42.0] ]
// เปลยรีิ่ข นคคา่ // พมร พต์ : [ [Linda, 53.0, 179], [Lisa, 35.0], [John, 42.0] ]
Arr2dim[0][1] = 53 ;
Logger.log(Arr2dim) ;
12.8. join()
JavaScript Array join() Method
https://www.w3schools.com/jsref/jsref_join.asp
ใชร้ค วมขอ้ค มลย ในอสำเรยล ใหก้ค ลสำยเป็ปนขค้อมลย String (ข้คอควสำม) กค้อนเดีคยวทงื่ขคี ัซนล ดว้ค ยเครืงอ่ งหมสำย , (คอมมู่ยา)
หรอง กสสำหนดตวัล ขนัลซ ไดค้เอง
รปย แบบกสำรใชงค้ สำน
array.join(separator)
พสำรสำมิเพ ตอรล
Parameter Description
separator (เวนช้ ว่าค งไดช้) ตัลวข้นนัลี ถ้ชาปลอ่ค ยวคา่ งไว้ช จะใชชต้ ลัวขีนัน้ล เปป็นคอมมคา่
138 หลกัล การเขีขยนโปรแกรม Google Apps Script โดย วสัลนตต์ คณุค ดรลกเศวต ([email protected])
ตวัล อยูย่สำง
function arrayFunction() {
var arr = [ 'Apple' , 'Banana' , 'Pear' , 'Strawberry' ] ;
var joinArr = arr.join() ; // Apple,Banana,Pear,Strawberry
Logger.log(joinArr) ;
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() ใชคร้ วมอสำเรยลเข้คสำด้ควยกลัน เมถอดนคซีไมู่ยเปลืคงี่ยนแปลงอสำเรยลเดพิม แตู่ยจะสร้สค ำงอสำเรยลใหมู่ย ฉะนซัลน ให้ค
สร้สค ำงตลัวแปรมสำรองรบลั ผลกสำรรวมอสำเรยดล ว้ค ย
รยปแบบกสำรใช้งค สำน
array1.concat(array2, array3, ..., arrayX)
พสำรสำมพิเตอรล
Parameter Description
array2, array3, ..., arrayX (ตอ้ช งการ) อาเรย์ทต ่ริขจี ะถบกู รวม
ตวร อยส่ม ำงทีท่ 1 - อสำเรย์พ 1 มตพิ ิพ
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]
}
บททีรขิ่ 12 : อาเรย์ตเมถอด 139
ตวร อยสม่ ำงท่ีท 2 - อสำเรย์พ 2 มตพิ ิพ ***
ตวัล อยสยู่ ำงนีใซค ชบ้ค อ่ยู ยมสำก เมง่อื เรสำจบัล ขอ้ค มยลจสำก Google Sheets มสำได้ค จะได้อค สำเรยล 2 มิตพ พมิ สำ ซงึถง่ื จสำกนซัลน เรสำ
อสำจจะลดหรอง เพงื่มิพ คอลลมั นลเข้คสำไป
function testArrayB(){
var arr2dim = [ ['A', 39, 12000 ] ,
['B', 46, 42321 ] ,
['C', 65, 22520 ] ] ;
// เพร่มิ สมาชกร ตอค่ ทาช้ ยทีขละแถว
arr2dim = arr2dim.map(function(row){
// ใช้ช push, unshift ก็กได้ช
return row.concat( ['More column'] ) ;
});
Logger.log(arr2dim) ;
/* [ [A, 39.0, 12000.0, More column] ,
[B, 46.0, 42321.0, More column] ,
[C, 65.0, 22520.0, More column] ] */
}
12.10. indexOf() ***
JavaScript Array indexOf() Method
https://www.w3schools.com/jsref/jsref_indexof_array.asp
ใชคค้ ค้นหสำในอสำเรยล โดยสูงย่ คู่ยสำท่คจืงี ะค้นค หสำเข้สค ำไป โดยจะคงนคสยู่ ำกลบลั มสำเปนป็ ดรรนตีค สส ำแหนู่ยงในอสำเรยล เปป็นเลข
0,1,2,3 … แตยู่ถส้ค ำคส่ยู ำทคง่ีใื ชค้ค้นค หสำไมยู่มใีค นอสำเรยล จะคนง คสู่ย ำ -1 กลลบั มสำ
รปย แบบกสำรใชงค้ สำน
array.indexOf(item, start)
พสำรสำมเิพ ตอรล
Parameter Description
item (ต้ชองการ) ขช้อมลูบ ทใริ่ีข ชค้ช น้ช หา
start (ไม่คจกาเป็ปน) จดคุ เริรม่ ตช้นค้ชนหา โดยคา่ค ลบ จะเรร่มิ นลับตกาแหน่คงและคนช้ หาจากดา้ช นหลงลั
หมสำยเหตถุ : ใชค้บยู่อยมสำกในกสำรค้คนหสำสพิงื่งทต่คืงี อค้ งกสำร ถคส้ ำคนง คสู่ย ำมสำเปนป็ -1 คอง ไมยู่เจอนงื่ลันเอง
140 หลัลกการเขยขี นโปรแกรม Google Apps Script โดย วสนลั ตต์ คณคุ ดลร กเศวต ([email protected])
ตรวอยสม่ ำงทท่ี 1
function arrayFunction() {
var fruits = ["Banana", "Orange", "Apple", "Mango", "Banana", "Orange", "Apple"] ;
// 0 12 3 4 56
var a = fruits.indexOf("Apple") ;
Logger.log(a) ; // 2
var b = fruits.indexOf("Apple", 4) ; // เรริ่มคน้ช หาทดิ่รขี รรชขีตกาแหน่คงทร่ีิข 4 (Banana)
Logger.log(b) ; // 6
var c = fruits.indexOf("broccoli") ;
Logger.log(c) ; // -1
}
ตรวอยส่ม ำงทท่ี 2 - ขอ้ค มยลเปน็ป เวลสำ ให้คใช้ค valueOf แปลงเปน็ป มิลพ ลวิพ ิพนสำทคีกู่อย น เพรสำะรปย แบบกสำรเขยคี นวนลั ทใงื่ีค น
ภสำษสำทคื่งีค นอสูย่ ำนไดค้ มีหค ลสำกหลสำยมสำก
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 : อาเรย์เต มถอด 141
ตวร อย่มสำง
function arrayFunction() {
var fruits = [ "Banana", "Orange", "Apple", "Mango", "Banana", "Orange", "Apple" ] ;
// 0 12 3 4 56
var a = fruits.lastIndexOf("Apple") ;
Logger.log(a) ; // 6
var b = fruits.lastIndexOf("Apple", 4) ; // เริ่รมคช้นหาทรีด่ขิ รรชีตข าก แหนง่ค ทิรข่ี 4 (Banana)
Logger.log(b) ; // 2 ( 6-4 )
var c = fruits.lastIndexOf("broccoli") ;
Logger.log(c) ; // -1
}
12.12. reverse()
JavaScript Array reverse() Method
https://www.w3schools.com/jsref/jsref_reverse.asp
ใชก้ค ลลบั ตสสำแหน่งูย สมสำชกิพ เอสำเรยลจสำกหน้คสำไปหลัลง หลัลงไปหนส้ค ำ
รปย แบบกสำรใชคง้ สำน
array.reverse()
ตวัล อยสู่ย ำง
var fruits = [ "Banana" , "Orange" , "Apple" , "Mango" ] ;
var n = fruits.reverse() ;
Logger.log(n) ; // [Mango, Apple, Orange, Banana]
12.13. includes() - Chrome V8
JavaScript Array includes() Method
https://www.w3schools.com/jsref/jsref_includes_array.asp
ใชตค้ รวจสอบวยู่สำอสำเรยล มีคสมสำชิพกตูย่อไปนซคีหรงอไมยู่ โดยทสสำงสำนแบบ Case-sensitive และจะคงนค่สยู ำกลับล มสำ
เปป็น บยลลทน
รปย แบบกสำรใชคง้ สำน
array.includes(element, start)
พสำรสำมิเพ ตอรล
Parameter Description
element (จาก เป็ปน) ขอช้ มูบลทร่ิขีใชชค้ น้ช หา
start (ไมบค่ ลังคบลั ) ตาก แหนคง่ ทิจขี่ร ะเรริ่มคช้นหา คา่ค ปรรยายคือม 0
142 หลกลั การเขยีข นโปรแกรม Google Apps Script โดย วสันล ต์ต คณคุ ดรลกเศวต ([email protected])
ตรวอยสม่ ำง
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
บททิขีร่ 12 : อาเรยเ์ต มถอด 143
12.16. fill
JavaScript Array fill() Method
https://www.w3schools.com/jsref/jsref_fill.asp
ใชก้ค รอกคู่สย ำทกงีื่ค สสำหนดลงในอสำเรยล
รปย แบบกสำรใช้งค สำน
array.fill(value, start, end)
พสำรสำมเพิ ตอรล
Parameter Description
value (จกาเปนป็ ) คาค่ ทิีขจ่ร ะเตรมลงในอาเรย์ต
start (ไม่คจาก เปน็ป ) ดรรชนีลข กาดลบั ในอาเรยเต์ รรม่ิ ตช้น ทิรจขี่ ะเตมร ค่คา
end (ไมค่จาก เปน็ป ) ดรรชนลขี าก ดบัล ในอาเรยตส์ คุดท้าช ยเริร่มตช้น ทร่ขีิจะเตมร คาค่ (คคา่ ปรยร ายเปปน็ array.length)
ตวร อยมส่ ำง
var fruits = ["Banana", "Orange", "Apple", "Mango"] ;
fruits.fill("Kiwi") ;
// ผล ["Kiwi", "Kiwi", "Kiwi", "Kiwi"] ;
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
144 หลักล การเขยีข นโปรแกรม Google Apps Script โดย วสนลั ตต์ คณคุ ดลร กเศวต ([email protected])
ตวร อยสม่ ำงท่ที 1 : อสำเรยลจสำก String
var myArr = Array.from("ABCDEFG") ;
Logger.log(myArr) ; // [A, B, C, D, E, F, G]
ตวร อยสม่ ำงทท่ี 2 : อสำเรยลจสำก String + ใชฟค้ ฝังกลชล่ืงันกลบั แตู่ยละอเิพ ลม็ก เมค้นตล
var newArr = Array.from([1, 2, 3], x => x + x ) ;
Logger.log(newArr) ; // [2.0, 4.0, 6.0]
ตวร อยส่ม ำงทที่ 3 : สรสค้ ำงอสำเรยลจสำกวตลั ถถ Set – กรองตัลวซสสซ ำในอสำเรยล เหลงอแตย่ตู วลั ทงีคื่ Unique ***
const set = new Set(['foo', 'bar', 'baz', 'foo', 'foo']) ;
const newArr = Array.from(set) ;
Logger.log(newArr) ; // [ "foo", "bar", "baz" ]
ตรวอยส่ม ำงทท่ี 4 : อสำเรยจล สำกวัตล ถถ Map
const map = new Map([ [ 1, 2 ] ,
[ 2, 4 ] ,
[ 4, 8 ] ]) ;
var ArrFromMap = Array.from(map) ; // ผล [[1, 2], [2, 4], [4, 8]]
Logger.log(ArrFromMap) ;
const mapper = new Map([ [ '1' , 'a' ] ,
[ '2' , 'b' ] ]) ;
var vals = Array.from(mapper.values()) ;
Logger.log(vals) ; // ผล ['a', 'b']
var keys = Array.from(mapper.keys()) ;
Logger.log(keys) ; // ผล ['1', '2']
ตวร อยส่ม ำงทที่ 5 : อสำเรยลจสำกวตลั ถถ arguments ***
( ดเย พพ่ิงืมเตพมิ ข้คอ 4.5 วตลั ถถ Arguments หนคส้ ำ 53 )
function f() {
return Array.from(arguments) ;
}
f(1, 2, 3) ; // [1.0, 2.0, 3.0]
บททรขิ่ี 12 : อาเรย์ตเมถอด 145
146 หลลักการเขขียนโปรแกรม Google Apps Script โดย วสันล ต์ต คณุค ดลร กเศวต ([email protected])
บททขี่ท 13
อาเรยร์เมถอด
ตระกลูล วนลลูป
13.1. map()
JavaScript Arrays & Map Method Tutorial - Google Apps Script Part 4
https://youtu.be/WA8QotNEVc4?list=PLv9Pf9aNgemvD9NFa86_udt-NWh37efmD
รปย แบบกสำรใช้งค สำน
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
thisValue (Optional) A value to be passed to the function to be used as its "this" value.
If this parameter is empty, the value "undefined" will be passed as its "this"
value
map() ใช้คสยู่งสมสำชิพกทกถ ตลวั ในอสำเรยล ไปทสส ำอะไรสลักอยยู่สำงในฟฝังกลชลื่งัน เชูย่น คสสำนวณ, แปะหน้คสำแปะหลลังดค้วย
ขค้อควสำม
กรณอท สำเรยพ์ 1 มติพ พิ สมสำชกพิ จะเปป็นคสยู่ ำโดดๆ แต่หม สำกเป็นป อสำเรย์พ 2 มพิตพิ สมสำชิกพ ในอสำเรยลกกค็ อง เสคน้ อสำเรยดล สค้ ำน
ใน
13.1.ก.) map() และ อาเรยล 1 มติพ ิพ
โคด้ค ดสค้ ำนล่ยูสำง ส่งูย สมสำชกิพ ในอสำเรยลไปทีคละตลัว เพือง่ ใสวู่ย งเล็กบครอบ
function mapMethod() {
var arr1dim = [ "Sara" , 24 , "Chaingmai" ] ;
// วนลบปู สค่งสมาชรกในอาเรย์ไต ปทกาบางอยา่ค งในฟฟงั ก์ชต ลิ่นัร ทร่ิรีข ะบคุ
var new_arr1dim = arr1dim.map(addBrackets) ;
Logger.log(new_arr1dim) ; // พพิมพล : [ (Sara), (24), (Chaingmai) ]
}
function addBrackets(item) { // item คอืม สมาชกร ในอาเรย์ต โดยจะวนลูบปสง่ค มาทีลข ะตลวั
return "(" + item + ")" ; // ใสค่วงเล็กบครอบ
}
148 หลกลั การเขยีข นโปรแกรม Google Apps Script โดย วสนลั ต์ต คณคุ ดลร กเศวต ([email protected])
สสำมสำรถ เขยีค นโค้คดโดยเอสำฟังฝ กชล ื่ลงันยัลดลงไปใน map เลยก็กได้ค เหมสำะกบลั โคดค้ ในฟฝงั กลชลนื่ัง ท่ไืคงี มู่ยยสำวเกนิพ ไป
function mapMethod() {
var arr1dim = [ "Sara" , 24 , "Chaingmai" ] ;
var new_arr1dim = arr1dim.map(function addXs(item){
return "X" + item + "X" ; // ใสค่ X หนา้ช และหลงัล
}) ; // จบ – map
Logger.log(new_arr1dim); // พมร พต์ : [ XSaraX, X24X, XChaingmaiX ]
}
13.1.ข.) map() และ อาเรยล 2 มพิตพิ
กรณีคเป็ปนอสำเรยล 2 มพิติพ สมสำชิพกในอสำเรยลก็กคงอ เส้คนอสำเรย์พดค้สำนใน ฉะนลัซนกสำรนสส ำไปประมวลผลหรงอกสำรคงน
คสู่ย ำกลบัล มสำ ตอค้ งทสส ำแบบอสำเรยล
ตวร อยส่ม ำงทที่ 1 นสส ำสมสำชกพิ ทีงื่คเปนป็ เสนค้ อสำรยล ไปทสสำบสำงอยสูย่ ำงในฟงฝั กชล ืงัน่ล
function mapMethod() { // สมาชรกตวัล ท่ิขีร 1
var arr2dim = [ // สมาชกร ตวลั ทีขริ่ 2
[ "Linda", 27, "Bangkok" ] , // สมาชรกตวัล ทรีขิ่ 3
[ "Lisa", 35, "Nontaburi" ] ,
[ "John", 42, "Petchaboon" ]
];
var new_arr2dim = arr2dim.map(doSomething); // ดูบผลทีข่ริ Logs –-- >
Logger.log(new_arr2dim) ;
}
function doSomething(row) {
return [ row[0] , row[1]+1 ,row[2] ] ;
}
ผล – อสำเรยใล หมยู่ มีคตวลั เลขเปล่คีืงยนไปจสำกอสำเรยตล งลัซ ตค้น โดยสมสำชพกิ ทเ่ีคงื ปปน็ ตวลั เลข ถกย เพม่งิืพ คูยส่ ำไป 1
Logs
[01] [ [Linda, 28.0, Bangkok],
[Lisa, 36.0, Nontaburi],
[John, 43.0, Petchaboon] ]
บททิรีข่ 13 : อาเรยเ์ต มถอด ตระกลบู วนลปบู 149
ตวร อยม่สำงทท่ี 2 เปลงี่ืคยนมพติ พิกสำรคนง คสู่ย ำ // สมาชกร ตวลั ท่ิรีข 1
// สมาชรกตัลวทิ่รีข 2
function mapMethod() { // สมาชกร ตลัวท่ขีริ 3
var arr2dim = [
[ "Linda", 27, "Bangkok" ] ,
[ "Lisa", 35, "Nontaburi" ] ,
[ "John", 42, "Petchaboon" ]
];
var new_arr2dim = arr2dim.map(doSomething);
Logger.log(new_arr2dim) ;
}
function doSomething(row) {
var textOutput = row[0] + " is from " + row[2] ;
var newAge = row[1] + 1 ;
return [ textOutput , newAge ] ;
}
ผล – ไดอ้ค สำเรยขล นสำด 3 แถว x2 คอลมตั นล
Logs
[ 01 ] [ [Linda is from Bangkok, 28.0] ,
[Lisa is from Nontaburi, 36.0] ,
[John is from Petchaboon, 43.0] ]
โคด้ค ขค้สำงตค้น จบัล ฟัฝงกชล นงล่ืั ยลัดลงใน map กกไ็ ด้ค ไดผ้ค ลแบบเดยคี วกลนั
function mapMethod() { "Bangkok" ] , // สมาชกร ตลัวท่ิรีข 1
"Nontaburi" ] , // สมาชรกตัวล ท่ิรีข 2
var arr2dim = [ "Petchaboon" ] // สมาชกร ตลัวท่ิรขี 3
["Linda", 27,
["Lisa", 35,
["John", 42,
];
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) ;
}
150 หลกัล การเขีขยนโปรแกรม Google Apps Script โดย วสัลนต์ต คณุค ดรลกเศวต ([email protected])